We produce firmware/source SBOMs, but nothing captures the control application's
own dependencies: the referenced CODESYS libraries (Standard, Util, OSCAT,
vendor libs) and the CODESYS runtime version. These are exactly the components
with ICS CVEs (e.g. the CODESYS V3 runtime "CoDe16" cluster), so without them CVE
matching for the PLC layer is blind.
Work
Extract referenced libraries + versions from the project's library manager
(PLCopen XML <addData> library placeholders / .library refs / projectarchive
library list).
Capture the CODESYS runtime/target version (from device info or the firmware
image's runtime binary).
Emit these as CycloneDX SBOM components (reuse the existing SBOM model) tagged pkg:codesys/... so the existing CVE pipeline (NVD) matches them.
Reconcile with the device firmware SBOM (the runtime binary on the Yocto image)
so the runtime isn't double-counted — same reconcile-don't-recompute approach as
the tramiton firmware path.
Depends on the CODESYS native + graphical-language SAST issue for richer project parsing but the library-ref list is available from
PLCopen XML addData today. Part of the CODESYS-on-Yocto tracker.
### Problem
We produce firmware/source SBOMs, but nothing captures the **control application's
own dependencies**: the referenced CODESYS **libraries** (Standard, Util, OSCAT,
vendor libs) and the **CODESYS runtime version**. These are exactly the components
with ICS CVEs (e.g. the CODESYS V3 runtime "CoDe16" cluster), so without them CVE
matching for the PLC layer is blind.
### Work
1. Extract referenced libraries + versions from the project's **library manager**
(PLCopen XML `<addData>` library placeholders / `.library` refs / projectarchive
library list).
2. Capture the **CODESYS runtime/target version** (from device info or the firmware
image's runtime binary).
3. Emit these as **CycloneDX** SBOM components (reuse the existing SBOM model) tagged
`pkg:codesys/...` so the existing **CVE** pipeline (NVD) matches them.
4. **Reconcile** with the device firmware SBOM (the runtime binary on the Yocto image)
so the runtime isn't double-counted — same reconcile-don't-recompute approach as
the tramiton firmware path.
### Files
- `compliance-agent/src/pipeline/plc/` (library/runtime extraction → SbomEntry)
- SBOM/CVE models + pipeline (reuse)
Depends on the CODESYS native + graphical-language SAST issue for richer project parsing but the library-ref list is available from
PLCopen XML `addData` today. Part of the CODESYS-on-Yocto tracker.
sharang
added this to the Onboarding v1 milestone 2026-07-16 10:40:47 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Problem
We produce firmware/source SBOMs, but nothing captures the control application's
own dependencies: the referenced CODESYS libraries (Standard, Util, OSCAT,
vendor libs) and the CODESYS runtime version. These are exactly the components
with ICS CVEs (e.g. the CODESYS V3 runtime "CoDe16" cluster), so without them CVE
matching for the PLC layer is blind.
Work
(PLCopen XML
<addData>library placeholders /.libraryrefs / projectarchivelibrary list).
image's runtime binary).
pkg:codesys/...so the existing CVE pipeline (NVD) matches them.so the runtime isn't double-counted — same reconcile-don't-recompute approach as
the tramiton firmware path.
Files
compliance-agent/src/pipeline/plc/(library/runtime extraction → SbomEntry)Depends on the CODESYS native + graphical-language SAST issue for richer project parsing but the library-ref list is available from
PLCopen XML
addDatatoday. Part of the CODESYS-on-Yocto tracker.