Skjult avhengighet
En skjult avhengighet er kode, en pakke eller en fil som et bygg laster ned og bruker, men som ingen lockfile eller manifest oppgir, så de fleste SBOM-er overser den.
Sist oppdatert: 11. november 2026
En skjult avhengighet (hidden dependency) er kode, en pakke eller en fil som et bygg laster ned og bruker, men som ingen lockfile eller manifest oppgir. Fordi de fleste SBOM-verktøy tar utgangspunkt i disse listene, mangler skjulte avhengigheter i de fleste SBOM-er, og det var nettopp der flere nyere forsyningskjedeangrep foregikk. I generell programvareutvikling betyr uttrykket også en ikke-deklarert kobling mellom moduler; her menes betydningen i forsyningskjeden.
Vanlige skjulte avhengigheter
- Install-hooks. npm kjører skriptene
preinstall,installogpostinstalli en pakke undernpm install(npm-dokumentasjonen). Det disse skriptene laster ned, dukker aldri opp ipackage-lock.json. Det var den veien ormen Shai-Hulud tok. - Byggeskript. Cargo kompilerer og kjører en crates
build.rsrett før craten bygges (Cargo Book). Noen byggeskript laster da ned et C-bibliotek eller en ferdigbygd binærfil, ogCargo.lockregistrerer det ikke. - Baseimages. I et containerbygg kommer baseimaget og operativsystemlagene fra et register, ikke fra noe språks lockfile. Se SBOM-er for Docker-images.
- CI-steg. Setup-actions og
curl | sh-installatører i en arbeidsflyt henter verktøy rett fra en URL, uten lockfile, versjonslåsing eller hash, med mindre forfatteren legger det til.
Kode som er committet til repositoriet (vendorerte avhengigheter), er en annen måte komponenter slipper unna manifester på, men den hentes ikke under bygget. «Phantom dependency» betyr noe helt annet: i JavaScript en pakke koden din bruker uten å deklarere den, tilgjengelig bare gjennom hoisting.
Hvorfor SBOM-verktøy overser dem
Lockfile-baserte verktøy leser den deklarerte listen i lockfilen og ser derfor bare det som er deklarert. Skannere som ser på resultatet, undersøker den ferdige artefakten og utleder hva som gikk inn, noe som blir gjetting for kompilert kode som Rust. Ingen av dem ser hva bygget hentet underveis. Hele listen over hva hver tilnærming overser, også cacher og byggeverktøy, står under SBOM-generatorer med åpen kildekode. En skjult avhengighet er et hull i SBOM-fullstendigheten som SBOM-en selv ikke kan avsløre.
Versjonslåsing løser det heller ikke: en lockfile kan være perfekt, og install-hooken den låser, kan likevel laste ned noe nytt. Bygg som henter ting under byggingen, er også en grunn til at et reproduserbart bygg er vanskelig å oppnå.
Slik finner du dem
- Les byggeloggen etter nedlastinger: utdata fra
npm installogcargo build, og linjer fracurlellerwget. - Sammenlign en SBOM generert fra lockfilen med pakkene installasjonssteget rapporterer.
- Søk i SBOM-en etter en pakke du vet finnes i baseimaget ditt, for eksempel
libc6. Mangler den, mangler lagene i imaget. - Søk etter
curlogwgeti arbeidsflytene dine.
Det pålitelige svaret er å registrere hva bygget faktisk tar inn over nettverket, i stedet for å rekonstruere det i etterkant.
CRACI
CRACI ser trafikken som kommer inn i hvert bygg, og registrerer derfor de skjulte avhengighetene lockfile-baserte verktøy overser. Når det ikke kunne se alt, for eksempel fordi en jobb tillot trafikk som går utenom den pakkebevisste proxyen, sier jobbens fullstendighetsstatus fra. Egress-policyen avgjør dessuten hvilke verter et bygg i det hele tatt kan nå, så et curl | sh til en vert policyen ikke tillater, mislykkes. Se SBOM-er fra byggetidspunktet.