Habr•September 24, 2026•🇷🇺Translated from Russian

Challenges in Building Accurate SBOMs for C and C++ Projects Highlighted by CodeScoring Analysis

In ecosystems with established package indexes such as Python, Java, or JavaScript, project composition analysis typically begins with a manifest that lists direct dependencies and allowed versions. Package managers resolve these requirements, fetch transitive dependencies, and record exact versions in a lock file. C and C++ projects rarely follow this model. A single library may be installed via a system package manager, built from source in a separate pipeline, or copied directly into the project directory, leaving no unified record of all components that end up in the final binary.

CodeScoring examined these difficulties while automating SBOM generation for large codebases, including LibreOffice, which contains over one hundred C/C++ libraries plus fonts, dictionaries, and a custom build system. Without a single source of truth, each component requires separate investigation from build commands back to project name, version, and origin. The company’s analysis shows that even when a library is found through linker arguments such as -lssl or explicit paths like /opt/libs/libfoo.a, the command line rarely reveals the original project, version, or applied patches.

Build-time and runtime inventories produce two distinct SBOMs. Build-time SBOMs record libraries linked during compilation, chosen targets, and observed commands. Runtime SBOMs reflect the dynamic libraries actually loaded in a given execution environment. Reconciling the two lists is necessary because a statically linked library disappears from the runtime view, while a dynamically loaded library may be replaced by a different compatible version at launch.

When metadata is absent, Johnny falls back to normalized function signatures, binary section analysis, and strings, yet compiler optimizations and strip operations limit precision to family or version range rather than exact version. The tool marks unverifiable entries with an unresolved suffix and supports manual correction via --lib-versions files using generic PURL identifiers. CMake, Yocto, and experimental SPDX generation features already produce partial SBOMs, but any library supplied as a raw artifact still requires separate provenance work.

The resulting SBOM records must include supplier, PURL or CPE identifier, and evidence of identity. CycloneDX supports confidence levels and completeness statements, allowing analysts to avoid fabricating versions when data is insufficient. This disciplined approach prevents blind spots that arise when one type of inventory is substituted for the other.

Related articles

AntiMalware•Supply Chain & Open Source

CrowdSec Confirms Theft of Source Code from Roughly 300 GitHub Repositories via TanStack Supply Chain Attack

French cybersecurity firm CrowdSec has confirmed that attackers stole source code from approximately 300 GitHub repositories, including around 170 private ones. The breach occurred in May 2026 through a compromised TanStack component that exfiltrated an API key with read access to the private codebase. The stolen material included code for the company's SaaS console, AWS procedures, connectors, and automation tools, while the remaining repositories contained already-public open source code. No customer data, passwords, organization details, tokens, or other secrets were included in the leak, and all potentially affected credentials were immediately rotated. CrowdSec stated that the code is tightly integrated with internal systems and has largely changed over the past four months, reducing its usefulness outside the company's environment. The SaaS service code undergoes regular audits, and the company sees no immediate threat from the exposure while the investigation continues.

Habr•Supply Chain & Open Source

Dependency Confusion Attacks Let Attackers Hijack Internal Library Names in Corporate Builds

A widespread supply chain risk allows attackers to publish packages with internal company names on public registries such as npm and PyPI, causing build systems to pull malicious versions instead of internal ones. The attack works because package managers treat multiple registries as a single list and select the highest version number, with no inherent priority for internal sources. Researcher Alex Birsan demonstrated the technique in February 2021 by registering names harvested from open repositories and error messages, successfully injecting packages into builds at Microsoft, Apple, PayPal, Shopify, Netflix, Tesla and Uber. The malicious code executes during installation because setup scripts and lifecycle hooks run with the privileges of the build agent, exposing environment variables, tokens and internal network access. Mitigation requires a single internal proxy repository that never mixes public responses for internal package names, scoped namespaces bound to private registries, lock files with content hashes, and disabling install scripts where possible. The technique remains effective against any organization that lists both internal and public registries in its build configuration.

Habr•Supply Chain & Open Source

NEOMSA ESB Release Strengthens Supply Chain Security Through SBOM and Dependency Hardening

Neoflex has released a new version of its NEOMSA ESB integration platform with a primary focus on cleaning up the software bill of materials and eliminating critical and high-severity vulnerabilities. The team automated SBOM generation using CycloneDX, ran SCA scans with Grype and OWASP Dependency-Check, and performed SAST and secret scanning across all build pipelines. Instead of blindly updating to the latest versions, engineers applied minimal fixed versions for each advisory while handling complex cases involving transitive dependencies, locked files, and deprecated build tools. The effort reduced the total package count from 5,872 to 1,683 after migrating the frontend build to Vite in Camel Karavan 4.18. Remaining medium and low findings were tracked in DefectDojo with clear remediation timelines. The changes deliver measurable risk reduction for on-premise deployments in critical infrastructure and financial organizations.

AntiMalware•Supply Chain & Open Source

CodeScoring Launches CodeScoring.Save Artifact Repository for Secure Enterprise Development

CodeScoring has introduced its own artifact storage solution called CodeScoring.Save, designed to handle packages, libraries, container images, and other software components used in development. The product targets corporate users of any size seeking a predictable and resilient repository that integrates security checks directly into storage and distribution workflows. Built in Go for modern Kubernetes environments, Save supports multiple package formats including Maven, npm, NuGet, PyPI, Go Modules, Docker/OCI, DEB, and RPM while providing proxy access to external repositories. It features role-based access, auditing, independent scaling of compute and storage layers, and native integration with CodeScoring.OSA to surface vulnerability data inside the repository itself. The company positions Save as a standalone local deployment option that can operate independently or alongside its existing OSA Proxy module to block malicious components at the repository level. Future plans include support for AI models as artifacts, starting with storage and distribution for ecosystems such as Hugging Face, along with certification for Russian secure development requirements.