<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Security regression visualization in CI/CD using trivy and GitHub actions⋆</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Yurii Zhuravchak</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Danyil Zhuravchak</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Anastasiia Zhuravchak</string-name>
          <email>anastasiia.y.tolkachova@lpnu.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Ivan Opirskyy</string-name>
          <email>ivan.r.opirskyi@lpnu.ua</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Lviv Polytechnic National University, Information Security Department</institution>
          ,
          <addr-line>12 Stepan Bandera str., 79000 Lviv</addr-line>
          ,
          <country country="UA">Ukraine</country>
        </aff>
      </contrib-group>
      <fpage>272</fpage>
      <lpage>281</lpage>
      <abstract>
        <p>This paper presents a lightweight and reproducible method for integrating container security scanning into CI/CD pipelines using fully open-source components. While many modern DevSecOps workflows incorporate vulnerability scanners such as Trivy, their output is typically used in a point-in-time manne -alerts are generated, acted upon, and forgotten. In contrast, this work introduces the concept of security regression tracking: a simple yet effective mechanism to persist, visualize, and analyze vulnerability trends across multiple builds over time. Our approach logs the number of vulnerabilities detected at each severity level (Critical, High, Medium, Low) per build, stores them in a time-series CSV file, and renders them using a Chart.js-based dashboard hosted on GitHub Pages. This enables development teams to assess whether their security posture is improving or regressing as images evolve, dependencies change, and patches are applied. To demonstrate the viability of the system, we conduct a structured experiment using a deliberately vulnerable container image. We simulate five typical development stages, including partial fixes, regressions, and full remediations. The dashboard clearly illustrates the impact of these changes, offering visual feedback that can guide technical decisions and risk prioritization. This solution is infrastructure-free, transparent, and extensible, making it well suited for small to medium-sized teams, open-source projects, and educational use. By shifting vulnerability tracking from reactive to historical and strategic, it empowers DevSecOps teams with actionable temporal insight.</p>
      </abstract>
      <kwd-group>
        <kwd>eol&gt;DevSecOps</kwd>
        <kwd>CI/CD</kwd>
        <kwd>Trivy</kwd>
        <kwd>vulnerability scanning</kwd>
        <kwd>GitHub Actions</kwd>
        <kwd>dashboard</kwd>
        <kwd>security regression</kwd>
        <kwd>open source</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        The acceleration of software development through Continuous Integration and Continuous
Deployment (CI/CD) pipelines has profoundly reshaped the way modern applications are built,
tested, and delivered. These practices enable rapid iteration, frequent releases, and faster
innovation—but they also introduce new security risks [
        <xref ref-type="bibr" rid="ref1 ref2 ref3 ref4">1–4</xref>
        ]. In environments where container
images are rebuilt and deployed multiple times a day, even a small vulnerability can rapidly
propagate into production unless adequate controls are in place [
        <xref ref-type="bibr" rid="ref5 ref6">5, 6</xref>
        ].
      </p>
      <p>
        In response to these concerns, the DevSecOps paradigm promotes the integration of security
measures directly into the development pipeline [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ]. Rather than applying security as a final
checkpoint, DevSecOps encourages embedding tools for static and dynamic analysis early and
continuously. Open-source scanners such as Trivy [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], Grype [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ], and Semgrep make it possible to
detect vulnerabilities in codebases, dependencies, and container images as part of the automated
build process [
        <xref ref-type="bibr" rid="ref10">10</xref>
        ].
      </p>
      <p>
        However, despite the availability of these tools, most scanning implementations operate in a
point-in-time fashion: a vulnerability is detected, an alert is issued, and developers either fix it or
suppress it. There is rarely any mechanism to retain and analyze scan data across builds, nor to
assess whether the overall security posture is improving or regressing over time. This temporal
blindness creates a missed opportunity for strategic decision-making, especially in long-running
projects with frequent deployments and changing dependencies [
        <xref ref-type="bibr" rid="ref11">11</xref>
        ].
      </p>
      <p>
        In real-world development, the security profile of an application evolves continuously. Base
images are patched (or go unpatched), third-party libraries are updated, and insecure patterns may
be introduced or removed. Without visibility into these changes, teams are forced to react to each
issue in isolation, with no sense of whether their system is becoming more secure or accumulating
technical security debt [
        <xref ref-type="bibr" rid="ref12">12</xref>
        ].
      </p>
      <p>
        In this paper, we propose a lightweight, fully open-source approach for security regression
tracking in containerized applications. Using Trivy by Aqua Security [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ], we integrate vulnerability
scanning directly into the CI/CD pipeline via GitHub Actions [
        <xref ref-type="bibr" rid="ref13">13</xref>
        ]. Each scan extracts severity-level
vulnerability counts (Critical, High, Medium, Low), which are appended to a time-series CSV log.
This data is then rendered using a web-based dashboard (Chart.js) that visualizes how vulnerability
levels change across builds.
      </p>
      <p>Our system is:
1. Self-contained and infrastructure-free (hosted entirely within the GitHub repository).
2. Reproducible, with every scan logged and versioned.
3. And extensible, allowing future integrations such as SBOM correlation, badge generation,
or full CVE tracing.</p>
      <p>To validate the approach, we conducted an experiment with a deliberately vulnerable container
image. We introduced five progressive modifications, mimicking common development scenarios—
partial fixes, regressions, dependency updates—and tracked the resulting scan output over time.
This demonstrated the system’s ability to capture both improvements and degradations in a
project’s security posture.</p>
      <p>The primary goal of this research is to develop and evaluate a practical and transparent method
to visualize the evolution of vulnerabilities in container images over time—something that is rarely
supported out of the box in existing security tools. We aim to bridge the gap between DevSecOps
automation and historical awareness, empowering development teams to track not just if they are
secure, but how that security is evolving with each build.</p>
    </sec>
    <sec id="sec-2">
      <title>2. Related work</title>
      <p>
        The integration of security scanning within CI/CD pipelines has become a cornerstone of modern
DevSecOps practices [
        <xref ref-type="bibr" rid="ref14">14</xref>
        ]. Numerous tools—including Trivy, Grype, and Snyk—offer automated
vulnerability scanning at build time, enabling teams to shift security left and detect issues early in
the software development lifecycle (SDLC). However, while static analysis and container scanning
are now widely adopted, relatively few approaches provide mechanisms for tracking how security
posture evolves over time.
      </p>
      <p>
        A growing body of research has addressed vulnerability detection in container ecosystems.
These studies typically focus on quantifying vulnerability prevalence, comparing scanner
effectiveness, and assessing the impact of base-image choices [
        <xref ref-type="bibr" rid="ref15">15</xref>
        ].
      </p>
      <p>
        Wist, Helsem, and Gligoroski [
        <xref ref-type="bibr" rid="ref16">16</xref>
        ] analyzed more than 2,500 Docker Hub images and discovered
a high density of vulnerabilities in publicly available containers. Their findings showed that even
official images are not immune to risk, though they generally fared better than
communitymaintained variants. Importantly, they also highlighted a lack of correlation between image
popularity and security, which implies that trusted sources may still harbor critical flaws.
      </p>
      <p>
        Haque and Babar [
        <xref ref-type="bibr" rid="ref17">17</xref>
        ], in their empirical study Well Begun is Half Done, explored base image
inheritance chains across 64,579 real-world GitHub projects. They found that a small number of
vulnerable base images led to wide vulnerability propagation downstream, emphasizing the
cascading risk of unpatched root layers. Their analysis demonstrates the importance of selecting
and maintaining secure foundational images—yet, again, their focus was on static analysis, not
temporal tracking.
      </p>
      <p>
        Kaur et al. [
        <xref ref-type="bibr" rid="ref18">18</xref>
        ] extended this line of inquiry into scientific computing environments, evaluating
container images used in disciplines such as neuroscience. Using four scanning tools including
Trivy, they demonstrated that regular updates and minimal image design could reduce
vulnerabilities by up to two-thirds. This reinforces the practice of image hygiene but also showed
that scanner outputs vary significantly, introducing complexity when comparing risk across time
or tools.
      </p>
      <p>
        Another critical angle is explored by Zerouali et al. [
        <xref ref-type="bibr" rid="ref19">19</xref>
        ], who introduced the notion of technical
lag—the difference between package versions in containers and their upstream releases. They
studied over 7,300 Debian-based containers and concluded that even “latest” tags are often
outdated, contributing to latent vulnerabilities and bug exposure. This illustrates that freshness
alone is not a guarantee of security and that visibility into versioning gaps is essential.
      </p>
      <p>Despite these contributions, most existing research provides a static snapshot of security status.
Studies often benchmark a set of containers at one point in time without exploring how
vulnerability profiles shift due to code changes, dependency updates, or changes in upstream
images. As such, temporal awareness—how vulnerabilities increase or decrease across commits or
builds—remains underexplored.</p>
      <p>
        In addition to container-specific studies, recent research emphasizes the importance of
integrating multi-layered security approaches within complex software ecosystems. Milevskyi et al.
[
        <xref ref-type="bibr" rid="ref20">20</xref>
        ] propose a multi-contour security methodology for sociocyberphysical systems, highlighting
the benefits of combining automated detection with layered protective controls. Similarly,
Shevchuk et al. [
        <xref ref-type="bibr" rid="ref21">21</xref>
        ] demonstrate the design of secured authentication, authorization, and
accounting services, which can be extended to CI/CD pipelines to enforce access policies and
prevent misconfigurations that may introduce vulnerabilities. Lakhno et al. [
        <xref ref-type="bibr" rid="ref22">22</xref>
        ] further stress the
role of decision-support systems in managing information protection, suggesting that automated
guidance can improve security response times and reduce human error. Additionally, Vakhula et al.
[
        <xref ref-type="bibr" rid="ref23">23</xref>
        ] explore cloud security challenges under dynamic orchestration, advocating for
“security-ascode” approaches that can complement vulnerability tracking over time. Finally, Harasymchuk
et al. [
        <xref ref-type="bibr" rid="ref24">24, 25</xref>
        ] show that structured information classification frameworks and predictive assessment
with LLMs can aid in prioritizing remediation efforts, which aligns with the objective of
monitoring how vulnerability profiles evolve across CI/CD builds.
      </p>
      <p>Furthermore, few open-source projects address this gap in a reproducible, dashboard-based
format that integrates directly with CI/CD. Available enterprise solutions (e.g., Snyk Monitor,
GitHub Advanced Security) offer partial historical views, but they are often opaque, require paid
plans, and do not easily integrate into custom DevSecOps workflows.</p>
      <p>This paper proposes a solution to fill this void: a lightweight, automated, and fully open method
for vulnerability trend monitoring in CI/CD. By leveraging Trivy for scanning, GitHub Actions for
automation, and Chart.js [25] for visualization, we create a transparent and extensible framework
that tracks vulnerability counts over time. This enables teams to assess not just whether
vulnerabilities exist, but how their posture is evolving—bringing measurable, historical awareness
into security automation.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Methodology</title>
      <sec id="sec-3-1">
        <title>3.1. CI/CD Integration</title>
        <p>We used GitHub Actions as the automation platform for our pipeline due to its accessibility, tight
integration with version control, and support for public repositories. The pipeline is triggered
either on code pushes to the main branch or on a scheduled daily basis.</p>
        <sec id="sec-3-1-1">
          <title>The pipeline performs the following steps:</title>
          <p>1. Docker image build: using a Dockerfile, we generate the container image to be tested.
2. Security scan: we run Trivy in JSON [26] output mode to scan the image for vulnerabilities
in operating system packages and application dependencies.
3. Parsing step: a custom Python script extracts key statistics from Trivy’s output (number of
Critical, High, Medium, and Low vulnerabilities) and appends them as a new row in a CSV
file [27].</p>
        </sec>
      </sec>
      <sec id="sec-3-2">
        <title>3.2. Scan Result Archiving</title>
        <p>To enable tracking over time, the pipeline stores results in a CSV file (history.csv), where each row
corresponds to a specific scan. The format includes a UTC timestamp and severity-level counts:</p>
        <p>The Python script appends new scan data to the file and ensures that only the most recent seven
entries are retained. This windowed history simplifies visualization while capturing trends in
vulnerability evolution.</p>
        <p>To persist this history across runs, the workflow restores the previous docs/data.csv file
(committed to the repository) and copies it into the working directory before appending new
results.</p>
      </sec>
      <sec id="sec-3-3">
        <title>3.3. Scan Result Archiving</title>
        <p>For intuitive tracking of risk changes, we developed a web-based dashboard using static HTML and
the Chart.js JavaScript library [28]. The dashboard reads data.csv from the /docs/ folder via a
clientside CSV parser and renders two visualizations:

</p>
        <sec id="sec-3-3-1">
          <title>A line chart showing changes in vulnerability count over time. A point-only chart that emphasizes identical data points to reveal when values remain unchanged. In addition, we compute and display a mathematical summary below the charts. This includes:</title>
          <p>

</p>
        </sec>
        <sec id="sec-3-3-2">
          <title>The difference in vulnerability counts from the first to the last scan.</title>
          <p>Whether each category (e.g., Critical) has improved, worsened, or remained constant.</p>
          <p>The total change in overall vulnerability counts.</p>
          <p>This summary gives immediate insight into the effectiveness of recent remediation efforts or
regressions.</p>
        </sec>
      </sec>
      <sec id="sec-3-4">
        <title>3.4. Experiment Design</title>
        <p>To simulate real-world security posture evolution, we created a sequence of five Docker image [29]
versions with controlled modifications:</p>
        <p>Each image is built and scanned in order, with results logged and visualized. This controlled
scenario emulates typical development lifecycle iterations and demonstrates the system’s ability to
track both improvement and degradation.</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>4. Results</title>
      <p>To evaluate the effectiveness of our approach, we applied the pipeline to a series of deliberately
crafted Docker images (v1 to v5), each representing different stages of software hardening or
regression. For each version, a Trivy scan was performed via GitHub Actions, and results were
appended to a CSV log, forming the data foundation for trend visualization.</p>
      <sec id="sec-4-1">
        <title>4.1. Vulnerability Trends over Time</title>
        <p>The dashboard rendered the following timeline of scan results, displaying changes in vulnerability
counts segmented by severity:
v1 shows a high baseline of vulnerabilities across all severities.
v2 demonstrates slight improvements due to the removal of several risky packages.
v3 introduces a spike, reflecting added vulnerable dependencies.
v4 significantly reduces all counts by replacing the base image and optimizing installed
packages.
v5 results in near-clean output using Alpine and minimal footprint design.</p>
        <p>V6 is v5.</p>
        <p>These changes are visualized via a line and point-based chart, clearly reflecting both security
regressions (v3) and improvements (v4, v5).</p>
      </sec>
      <sec id="sec-4-2">
        <title>4.2. Mathematical Summary</title>
        <p>An automatic calculation in the dashboard summarizes the difference between the first and last
scan:</p>
        <p>This quantitative summary confirms the effectiveness of progressive hardening steps and
validates the system’s ability to track security posture changes in a meaningful and interpretable
manner.</p>
      </sec>
      <sec id="sec-4-3">
        <title>4.3. Dashboard Evaluation</title>
        <sec id="sec-4-3-1">
          <title>The final dashboard provides:</title>
          <p>

</p>
        </sec>
        <sec id="sec-4-3-2">
          <title>Clear visual representation of vulnerability fluctuations.</title>
          <p>Contextual feedback on security regression or improvement.</p>
          <p>Instant visibility into build history with minimal manual effort.</p>
          <p>Despite its simplicity, this solution proved to be highly effective in practice. The use of
GitHubhosted infrastructure enabled easy sharing and reproduction of results, while the use of static CSV
logging avoided the complexity of full-fledged databases or dashboards.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-5">
      <title>5. Discussion</title>
      <p>The results demonstrate that even with minimal infrastructure, it is possible to gain significant
insight into the evolving security posture of containerized applications. Our approach offers several
practical advantages and surfaces important considerations regarding real-world DevSecOps
adoption.</p>
      <sec id="sec-5-1">
        <title>5.1. Practical Benefits</title>
        <p>Lightweight and accessible: The system uses only GitHub Actions, Trivy, and static CSV
logs. It avoids the overhead of database backends, paid dashboards, or proprietary
integrations.</p>
        <p>Visual awareness: By introducing time-series analysis, security becomes less reactive and
more proactive. Teams can immediately see if a new dependency causes a spike in risk or if
hardening measures produce measurable improvements.</p>
        <p>Zero infrastructure requirements: The entire solution is self-contained within a GitHub
repository. No external hosting, containers, or cloud resources are needed.</p>
      </sec>
      <sec id="sec-5-2">
        <title>5.2. Reproducibility Transparency</title>
        <p>The full pipeline, data history, and rendered dashboard are stored in the same version-controlled
project. This enables:


</p>
        <p>Auditable security regression history (e.g., for compliance or security reviews).</p>
        <p>Collaboration between developers and security engineers.</p>
        <p>Educational use in teaching secure CI/CD practices [30].</p>
        <p>Unlike commercial tools that hide scanning logic and history behind dashboards, our
implementation allows full control and customization by the user.</p>
      </sec>
      <sec id="sec-5-3">
        <title>5.3. Limitations</title>
        <p>


</p>
        <p>Metric granularity: The current approach aggregates vulnerability counts by severity, but
does not distinguish between fixed vs. unfixed CVEs, affected package names, or risk
contexts.</p>
        <p>No direct correlation to code changes: Vulnerability increases may stem from base image
changes or dependency drift unrelated to intentional development decisions.
Limited historic window: By default, only the latest seven scans are stored to reduce CSV
complexity. Larger history sizes may require adaptation of storage and visualization
strategies.</p>
      </sec>
      <sec id="sec-5-4">
        <title>5.4. Opportunities for Extension</title>
        <sec id="sec-5-4-1">
          <title>Several enhancements could strengthen this solution:</title>
          <p>Storing full Trivy JSON per scan, enabling deep drill-down and historical forensics.
SBOM integration, aligning scan results with specific software bills of materials.
Correlation with Git commits or PRs, so spikes or improvements can be traced to specific
changes.</p>
          <p>GitHub badges, e.g., to display current vulnerability counts in README.</p>
          <p>Multi-project support, allowing monitoring of several services from one dashboard.</p>
          <p>This approach provides a compelling entry point for teams aiming to adopt DevSecOps
incrementally, enabling observability over time without disrupting existing workflows or requiring
extensive investment.</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-6">
      <title>Conclusions</title>
      <p>This paper presents a practical, reproducible method for visualizing vulnerability trends in
containerized applications within CI/CD pipelines. By integrating Trivy scans with GitHub Actions
and storing results in a time-series CSV format, we enable lightweight security regression
trackin —a critical but often missing component of modern DevSecOps practices.</p>
      <p>Unlike most point-in-time vulnerability detection tools, our implementation focuses on
temporal awareness: understanding how a container’s risk profile evolves. This empowers
development teams to make informed decisions, prioritize remediation, and identify the security
impact of changes between builds.</p>
      <p>The method is especially suitable for small teams, open-source projects, educational
environments, and early-stage DevSecOps adoption. It lowers the barrier to historical security
monitoring without requiring cloud-native platforms or commercial licenses.</p>
      <p>In future work, we aim to extend the system to support full scan traceability, software bill of
materials (SBOM) analysis, commit-to-scan correlation, and GitHub-based alerting mechanisms.
Our goal is to make historical security awareness as integral to CI/CD as build status and test
coverage are today.</p>
    </sec>
    <sec id="sec-7">
      <title>Declaration on Generative AI</title>
      <p>While preparing this work, the authors used the AI programs Grammarly Pro to correct text
grammar and Strike Plagiarism to search for possible plagiarism. After using this tool, the authors
reviewed and edited the content as needed and took full responsibility for the publication’s content.
Type II, in: Cybersecurity Providing in Information and Telecommunication Systems, 3991,
2025, 215–232.
[25] Mozilla, Working with JSON. https://developer.mozilla.org/en-US/docs/Learn_web_
development/Core/Scripting/JSON
[26] Microsoft, Create or Edit .csv Files to Import into Outlook.
https://support.microsoft.com/enus/office/create-or-edit-csv-files-to-import-into-outlook-4518d70d-8fe946ad-94fa-1494247193c7
[27] Chartjs. Chartjs. https://www.chartjs.org/
[28] D. Fernández González, J. R. García, J. M. de Fuentes, SecDocker: Hardening the Continuous</p>
      <p>Integration Workflow, SN Comput. Sci. 3:80 , 2022. doi:10.1007/s42979-021-00939-4
[29] Amazon, Best Practices for CI/CD Pipelines.
https://docs.aws.amazon.com/prescriptiveguidance/latest/strategy-cicd-litmus/cicd-best-practices.html
[30] S. Milevskyi, et al., Development of the Sociocyberphysical Systems Multi-Contour Security
Methodology, Eastern-Eur. J. Enterp. Technol. 1/9 (127) (2024) 34–51.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>S.</given-names>
            <surname>Shevchenko</surname>
          </string-name>
          , et al.,
          <article-title>Information Security Risk Management using Cognitive Modeling, in: Cybersecurity Providing in Information and Telecommunication Systems II, CPITS-II, vol</article-title>
          .
          <volume>3550</volume>
          (
          <year>2023</year>
          )
          <fpage>297</fpage>
          -
          <lpage>305</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>S.</given-names>
            <surname>Shevchenko</surname>
          </string-name>
          , et al.,
          <source>Protection of Information in Telecommunication Medical Systems based on a Risk-Oriented Approach, in: Cybersecurity Providing in Information and Telecommunication Systems</source>
          , vol.
          <volume>3421</volume>
          (
          <year>2023</year>
          )
          <fpage>158</fpage>
          -
          <lpage>167</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>Y.</given-names>
             
            <surname>Kostiuk</surname>
          </string-name>
          , et al.,
          <article-title>A System for Assessing the Interdependencies of Information System Agents in Information Security Risk Management using Cognitive Maps</article-title>
          ,
          <source>in: 3rd Int. Conf. on Cyber Hygiene &amp; Conflict Management in Global Information Networks (CH&amp;CMiGIN)</source>
          , Kyiv, Ukraine, vol.
          <volume>3925</volume>
          ,
          <year>2025</year>
          ,
          <fpage>249</fpage>
          -
          <lpage>264</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>Y.</given-names>
             
            <surname>Kostiuk</surname>
          </string-name>
          , et al.,
          <article-title>Models and Algorithms for Analyzing Information Risks during the Security Audit of Personal Data Information System</article-title>
          ,
          <source>in: 3rd Int. Conf. on Cyber Hygiene &amp; Conflict Management in Global Information Networks (CH&amp;CMiGIN)</source>
          , Kyiv, Ukraine, vol.
          <volume>3925</volume>
          ,
          <year>2025</year>
          ,
          <fpage>155</fpage>
          -
          <lpage>171</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>Z.</given-names>
            <surname>Pan</surname>
          </string-name>
          et al.,
          <article-title>Ambush from All Sides: Understanding Security Threats in Open-Source Software CI/CD Pipelines</article-title>
          , arXiv,
          <year>2024</year>
          . doi:
          <volume>10</volume>
          .48550/arXiv.2401.17606
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>A.</given-names>
            <surname>Zerouali</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Mens</surname>
          </string-name>
          , G. Robles, and
          <string-name>
            <given-names>J. M.</given-names>
            <surname>Gonzalez-Barahona</surname>
          </string-name>
          ,
          <article-title>On the Relation Between Outdated Docker Containers, Severity Vulnerabilities, and</article-title>
          <string-name>
            <surname>Bugs</surname>
          </string-name>
          ,
          <source>Information and Software Technology</source>
          ,
          <volume>153</volume>
          ,
          <year>2023</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <surname>AWS</surname>
          </string-name>
          ,
          <article-title>What is DevSecOps? aws</article-title>
          .amazon.com/what-is/devsecops/
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>Aqua</given-names>
            <surname>Security</surname>
          </string-name>
          ,
          <article-title>Trivy: Simple and Comprehensive Vulnerability Scanner</article-title>
          . https://github.com/aquasecurity/trivy
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <surname>Anchore</surname>
          </string-name>
          ,
          <article-title>Grype: Vulnerability Scanner for Container Images and Filesystems</article-title>
          . https://github.com/anchore/grype
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>C.</given-names>
            <surname>Rajapakse</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Babar</surname>
          </string-name>
          , and
          <string-name>
            <given-names>H.</given-names>
            <surname>Zhang</surname>
          </string-name>
          , Practitioners' Perspectives on Integrating Security into DevOps, arXiv,
          <year>2021</year>
          . doi:
          <volume>10</volume>
          .48550/arXiv.2107.02096
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>GitHub</given-names>
            <surname>Docs</surname>
          </string-name>
          ,
          <article-title>Security Overview of GitHub Actions</article-title>
          . https://docs.github.com/en/ actions/security-guides/
          <article-title>security-hardening-for-github-actions.</article-title>
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <surname>Productplan</surname>
            ,
            <given-names>Technical</given-names>
          </string-name>
          <string-name>
            <surname>Debt</surname>
          </string-name>
          . www.productplan.com/glossary/technical-debt/
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>GitHub</given-names>
            <surname>Actions</surname>
          </string-name>
          , About GitHub Actions. https://docs.github.com/en/actions/learn-githubactions/understanding-github-actions
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>M.</given-names>
            <surname>Feio</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Leitão</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Fonseca</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Guerreiro</surname>
          </string-name>
          ,
          <article-title>An Empirical Study of DevSecOps Focused on Continuous Security Testing</article-title>
          ,
          <source>in: Proceedings of EuroS&amp;PW</source>
          ,
          <year>2024</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [15]
          <string-name>
            <surname>Docker</surname>
            <given-names>Docs</given-names>
          </string-name>
          , Dockerfile Best Practices. https://docs.docker.com/develop/develop-images/ dockerfile_best-practices/
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [16]
          <string-name>
            <given-names>A.</given-names>
             
            <surname>Kerman</surname>
          </string-name>
          , et al.,
          <article-title>Implementing a Zero-Trust Architecture</article-title>
          ,
          <source>National Institute of Standards and Technology (NIST)</source>
          ,
          <year>2020</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref17">
        <mixed-citation>
          [17]
          <string-name>
            <given-names>H.</given-names>
            <surname>Wist</surname>
          </string-name>
          ,
          <string-name>
            <given-names>K.</given-names>
            <surname>Helsem</surname>
          </string-name>
          , and
          <string-name>
            <given-names>D.</given-names>
            <surname>Gligoroski</surname>
          </string-name>
          ,
          <article-title>An Empirical Study on the Security of Official and Community Docker Hub Images</article-title>
          , arXiv,
          <year>2020</year>
          . doi:
          <volume>10</volume>
          .48550/arXiv.
          <year>2006</year>
          .02932
        </mixed-citation>
      </ref>
      <ref id="ref18">
        <mixed-citation>
          [18]
          <string-name>
            <given-names>M. N.</given-names>
            <surname>Haque</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M. A.</given-names>
            <surname>Babar</surname>
          </string-name>
          ,
          <article-title>Well Begun is Half Done: Empirical Evidence on Security Hygiene Practices in Using Base Images for Dockerfiles</article-title>
          , arXiv,
          <year>2021</year>
          .doi:
          <volume>10</volume>
          .48550/arXiv.2112.12597
        </mixed-citation>
      </ref>
      <ref id="ref19">
        <mixed-citation>
          [19]
          <string-name>
            <given-names>T.</given-names>
            <surname>Kaur</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Dey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Poenaru</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Prins</surname>
          </string-name>
          , To Use or Not to
          <article-title>Use: An Empirical Study of Vulnerabilities in Scientific Container Images</article-title>
          , arXiv,
          <year>2020</year>
          .doi:
          <volume>10</volume>
          .48550/arXiv.
          <year>2010</year>
          .13970
        </mixed-citation>
      </ref>
      <ref id="ref20">
        <mixed-citation>
          [20]
          <string-name>
            <given-names>D.</given-names>
             
            <surname>Shevchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Harasymchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
             
            <surname>Partyka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>N.</given-names>
             
            <surname>Korshun</surname>
          </string-name>
          , Designing Secured Services for Authentication, Authorization, and Accounting of Users,
          <source>in: Cybersecurity Providing in Information and Telecommunication Systems</source>
          ,
          <volume>3550</volume>
          ,
          <year>2023</year>
          ,
          <fpage>217</fpage>
          -
          <lpage>225</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref21">
        <mixed-citation>
          [21]
          <string-name>
            <given-names>V.</given-names>
             
            <surname>Lakhno</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
             
            <surname>Kozlovskii</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
             
            <surname>Boiko</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
             
            <surname>Mishchenko</surname>
          </string-name>
          ,
          <string-name>
            <surname>I.</surname>
          </string-name>
           
          <article-title>Opirskyy, Management of Information Protection based on the Integrated Implementation of Decision Support Systems, Eastern-Eur</article-title>
          .
          <source>J. Enterp. Technol. Inf. Controlling Syst</source>
          .
          <volume>5</volume>
          (
          <issue>9</issue>
          (
          <issue>89</issue>
          )) (
          <year>2017</year>
          )
          <fpage>36</fpage>
          -
          <lpage>41</lpage>
          . doi:
          <volume>10</volume>
          .15587/
          <fpage>1729</fpage>
          -
          <lpage>4061</lpage>
          .
          <year>2017</year>
          .111081
        </mixed-citation>
      </ref>
      <ref id="ref22">
        <mixed-citation>
          [22]
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Vakhula</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
             
            <surname>Opirskyy</surname>
          </string-name>
          ,
          <string-name>
            <surname>O.</surname>
          </string-name>
           
          <article-title>Mykhaylova, Research on Security Challenges in Cloud Environments and Solutions based on the “Security-as-Code” Approach</article-title>
          , in: Cybersecurity
          <source>Providing in Information and Telecommunication Systems</source>
          ,
          <volume>3550</volume>
          ,
          <year>2023</year>
          ,
          <fpage>55</fpage>
          -
          <lpage>69</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref23">
        <mixed-citation>
          [23]
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Harasymchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Deineka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
             
            <surname>Partyka</surname>
          </string-name>
          ,
          <string-name>
            <surname>V.</surname>
          </string-name>
           
          <article-title>Kozachok, Information Classification Framework According to SOC 2 Type II, in: Cybersecurity Providing in Information and Telecommunication Systems II,</article-title>
          <year>3826</year>
          ,
          <year>2024</year>
          ,
          <fpage>182</fpage>
          -
          <lpage>189</lpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref24">
        <mixed-citation>
          [24]
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Deineka</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
             
            <surname>Harasymchuk</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
             
            <surname>Partyka</surname>
          </string-name>
          ,
          <string-name>
            <surname>A.</surname>
          </string-name>
           
          <article-title>Obshta, Application of LLM for Assessing the Effectiveness and Potential Risks of the Information Classification System According to SOC 2</article-title>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>