Ako vygenerovať SBOM z package-lock.json alebo NuGet za 10 minút
SBOM sa negeneruje ručne — vytvoríte ho z lock súboru jedným príkazom. Ukazujeme konkrétne príkazy pre Syft, Trivy, `npm sbom` a CycloneDX .NET, výstup v CycloneDX aj SPDX, a čo z toho CRA (Príloha I časť II) skutočne požaduje: aspoň top-level závislosti v bežnom strojovo čitateľnom formáte. Nie je to raketová veda a nepotrebujete konzultanta.
SBOM znie ako veľká compliance úloha, ale v praxi je to jeden príkaz a pár minút. Cyber Resilience Act ho vyžaduje v Prílohe I, časť II, bod 1 ako súčasť procesu riešenia zraniteľností — a nepredpisuje pri tom žiadny drahý nástroj. Tento návod je čisto praktický: čo presne spustiť pri Node.js aj .NET projekte, aby ste mali SBOM v oboch bežných formátoch.
Čo z SBOM žiada CRA (v skratke)
Aby ste vedeli, kedy je hotovo: nariadenie (EÚ) 2024/2847 hovorí o minimálne top-level (priamych) závislostiach v bežne používanom, strojovo čitateľnom formáte. Konkrétny štandard nepredpisuje — v praxi to znamená CycloneDX alebo SPDX, dva zavedené formáty. SBOM nezverejňujete: je súčasťou technickej dokumentácie a predkladá sa orgánu dohľadu nad trhom na žiadosť. Detailne to rozoberá SBOM pre malé firmy; tu ideme rovno na príkazy.
Node.js / npm projekt
Ak máte package-lock.json, máte tri jednoduché cesty. Najrýchlejšia je vstavaný príkaz npm (od npm 10):
- Vstavané v npm:
npm sbom --sbom-format cyclonedx > sbom.cdx.json— vyrobí CycloneDX priamo z lock súboru, bez inštalácie čohokoľvek navyše. Pre SPDX použite--sbom-format spdx. - Syft (open source, Apache-2.0):
syft scan dir:. -o cyclonedx-json=sbom.cdx.json -o spdx-json=sbom.spdx.json— jedným behom vyrobí oba formáty naraz. Vie čítať aj priamo lock súbor:syft scan file:package-lock.json -o cyclonedx-json. - Trivy (open source, Apache-2.0):
trivy fs --format cyclonedx --output sbom.cdx.json .— Trivy navyše vie ten istý sken hneď porovnať proti databázam zraniteľností.
Zistite, či sa vás CRA týka
Šesť otázok, dve minúty, bez účtu. Dostanete triedu produktu a prvé kroky.
.NET / NuGet projekt
Pre .NET je najpriamejší oficiálny nástroj CycloneDX:
- Inštalácia:
dotnet tool install --global CycloneDX(raz). - Generovanie:
dotnet CycloneDX MyApp.sln -j -o .— prejde solution alebo projekt a vytvorí CycloneDX (-j= JSON) do aktuálneho priečinka. - Alternatíva Syft:
syft scan dir:. -o cyclonedx-json=sbom.cdx.jsonfunguje aj nadpackages.lock.json(ak máte zapnutýRestorePackagesWithLockFile).
Ak lock súbor ešte nemáte, pri .NET ho zapnete cez RestorePackagesWithLockFile v .csproj a dotnet restore ho vytvorí — vďaka nemu bude SBOM obsahovať presné vyriešené verzie, nielen rozsahy z manifestu.
Pár zásad, aby vám SBOM naozaj slúžil
Vygenerovať súbor je začiatok; hodnotu má, keď je aktuálny a dohľadateľný:
- Verzujte SBOM s každým releasom. Každá verzia produktu má vlastný zoznam komponentov — inak neviete, ktorá dodaná verzia je zraniteľná.
- Zaraďte generovanie do CI. Jeden krok v pipeline, ktorý pri builde vypľuje
sbom.cdx.jsonako artefakt, znamená, že nikdy nezabudnete. - Uchovávajte ho s dokumentáciou. Technická dokumentácia sa podľa CRA uchováva aspoň 10 rokov od uvedenia na trh (alebo počas support periódy, ak je dlhšia) — SBOM patrí k nej.
- Nezastavte sa pri top-level. Minimum sú priame závislosti, ale Syft aj Trivy zachytia aj tranzitívne — a práve tie vás pri prvom incidente najčastejšie prekvapia.
Kontajnery, monorepá a viac jazykov
Ak nedodávate holý kód, ale kontajner alebo aplikáciu z viacerých jazykov, princíp je rovnaký, len cieľ skenu je iný:
- Docker image:
syft scan <image>:<tag> -o cyclonedx-json=sbom.cdx.jsonalebotrivy image --format cyclonedx --output sbom.cdx.json <image>:<tag>— zachytí OS balíčky aj aplikačné závislosti vnútri image. - Monorepo s viacerými ekosystémami (napr. Node front-end + .NET back-end): oba nástroje prejdú celý strom a poskladajú jeden SBOM naprieč jazykmi. Alebo vygenerujte SBOM per komponent a zlúčte ich pri release.
- Priradenie k verzii produktu: SBOM pomenujte a ulož s číslom verzie, ktorú dodávate —
sbom-2.5.0.cdx.json. To je to, čo neskôr umožní odpovedať „ktoré vydané verzie sú zraniteľné".
Čo SBOM sám osebe nerieši
SBOM je zoznam, nie strážca. Sám vám nepovie, že v komponente pribudla nová zraniteľnosť — to zistíte, až keď ho porovnáte proti databázam (OSV.dev, NVD, CISA KEV). A práve to porovnávanie je opakovaná, nie jednorazová robota: nové CVE vychádzajú denne. Ako skratky (CVE, CVSS, EPSS, KEV) čítať, rozoberáme v samostatnom článku.
Časté otázky
- CycloneDX alebo SPDX? CRA nepredpisuje; oba sú „bežne používané, strojovo čitateľné". Syft aj Trivy vedia vyrobiť oba naraz, tak si spravte oba.
- Stačí
package.json/.csproj? Nie — manifest nemá presné vyriešené verzie ani tranzitívne závislosti. Generujte z lock súboru alebo buildu. - Ako často SBOM regenerovať? Pri každom release; ideálne automaticky v CI, aby ste nezabudli.
- Musíme SBOM zverejniť? Nie — je súčasťou technickej dokumentácie a predkladá sa orgánu na žiadosť.
Na čo si dať pozor
Dve chyby sa opakujú. Prvá: vygenerovať SBOM raz „na ukážku" a nechať ho zastarať — pri prvom incidente potom nesedí s dodanou verziou. Druhá: spoľahnúť sa na manifest namiesto lock súboru, takže SBOM nemá presné verzie a monitoring proti databázam je nespoľahlivý. Oboje rieši jeden návyk: generovať SBOM z lock súboru automaticky pri builde a verzovať ho s vydaním. Potom je SBOM vždy aktuálny a použiteľný na to najdôležitejšie — rýchle „týka sa nás nové CVE?".
Kľúčový bod
SBOM nie je hory papierov, ale jeden príkaz a pár minút. Príloha I časť II ho žiada ako súčasť riešenia zraniteľností — minimálne top-level závislosti v bežnom strojovo čitateľnom formáte (CycloneDX alebo SPDX). Node.js projekt: npm sbom, Syft alebo Trivy z lock súboru. .NET: dotnet CycloneDX alebo Syft nad packages.lock.json. Kontajner či monorepo? Rovnaké nástroje, iný cieľ skenu. Kľúčové návyky: generujte z lock súboru (nie z manifestu), zaraďte to do CI a verzujte SBOM s každým releasom. SBOM je ale len zoznam, nie strážca — hodnotu má, až keď ho priebežne porovnávate proti databázam (OSV, KEV, EPSS). To je opakovaná robota, lebo nové CVE pribúdajú denne — a práve automatizácia toho porovnávania rozhoduje o tom, či odpoveď „týka sa nás?" máte za chvíľu alebo za hodiny.
Ako pomáha CRAguard
CRAguard vezme váš lock súbor, vygeneruje z neho SBOM (CycloneDX aj SPDX), drží ho verzovaný pri každom vydaní a denne ho porovnáva s OSV, KEV a EPSS — takže odpoveď „týka sa nás nové CVE?" máte hotovú skôr, než sa spustí 24-hodinová lehota z čl. 14. Zistite, či sa vás CRA týka, alebo sa zaraďte do waitlistu — dáme vedieť pri spustení.
Tento článok je informatívny a nie je právnym poradenstvom. Vychádza z nariadenia (EÚ) 2024/2847 (Príloha I časť II) a usmernenia Európskej komisie zo dňa 27. 7. 2026. Uvedené nástroje sú tretích strán; príkazy si overte podľa aktuálnej verzie nástroja.
Zistite, či sa vás CRA týka
Šesť otázok, dve minúty, bez účtu. Dostanete triedu produktu a prvé kroky.