V roce 2026 o 131% více nahlášených CVE denně než loni.
← Zpět na slovník

Skrytá závislost

Skrytá závislost je kód, balíček nebo soubor, který build stáhne a použije, ale žádný lockfile ani manifest ho neuvádí, takže ho většina SBOM vynechá.

Poslední aktualizace: 11. listopadu 2026

Skrytá závislost (hidden dependency) je kód, balíček nebo soubor, který build stáhne a použije, ale žádný lockfile ani manifest ho neuvádí. Protože většina nástrojů SBOM vychází právě z těchto seznamů, skryté závislosti ve většině SBOM chybějí, a právě tudy vedlo několik nedávných útoků na dodavatelský řetězec. V obecném softwarovém inženýrství tento výraz označuje také nedeklarovanou vazbu mezi moduly; zde jde o význam z oblasti dodavatelského řetězce.

Běžné skryté závislosti

  • Instalační hooky. npm spouští skripty balíčku preinstall, install a postinstall během npm install (dokumentace npm). Cokoli tyto skripty stáhnou, se v package-lock.json nikdy neobjeví. Touto cestou postupoval červ Shai-Hulud.
  • Build skripty. Cargo zkompiluje a spustí build.rs crate těsně před jeho sestavením (Cargo book). Některé build skripty v tu chvíli stahují knihovnu v C nebo předkompilovanou binárku a Cargo.lock to nezaznamená.
  • Base image. Při buildu kontejneru pochází base image a jeho vrstvy operačního systému z registru, ne z lockfilu některého jazyka. Viz SBOM pro Docker image.
  • Kroky CI. Setup akce a instalátory curl | sh ve workflow stahují nástroje přímo z URL, bez lockfilu, připnuté verze nebo hashe, pokud je autor nepřidá.

Kód commitnutý do repozitáře (vendorované závislosti) je další způsob, jak komponenty unikají manifestům, během buildu se ale nestahuje. „Phantom dependency“ znamená zase něco jiného: v JavaScriptu balíček, který váš kód používá, aniž by ho deklaroval, a který je dostupný jen díky hoistingu.

Proč je nástroje SBOM vynechávají

Nástroje založené na lockfilu čtou deklarovaný seznam v lockfilu, takže vidí jen to, co bylo deklarováno. Skenery výstupu zkoumají hotový artefakt a odvozují, co do něj vstoupilo, což je u kompilovaného kódu, jako je Rust, odhad. Ani jeden přístup nevidí, co build cestou stáhl. Úplný seznam toho, co který přístup vynechává, včetně cache a build nástrojů, najdete v článku open source generátory SBOM. Skrytá závislost je mezera v úplnosti SBOM, kterou samotná SBOM odhalit nedokáže.

Nevyřeší to ani připínání verzí: lockfile může být dokonalý, a instalační hook, který připíná, přesto může stáhnout něco nového. Buildy, které stahují během buildu, jsou také jedním z důvodů, proč je reprodukovatelný build těžké dosáhnout.

Jak je najít

  • Projděte log buildu a hledejte stahování: výstup npm install a cargo build a řádky z curl nebo wget.
  • Porovnejte SBOM vygenerovanou z lockfilu s balíčky, které hlásí krok instalace.
  • Vyhledejte ve své SBOM balíček, o kterém víte, že je ve vašem base image, například libc6. Pokud tam není, vrstvy image chybějí.
  • Prohledejte svá workflow pomocí grep na curl a wget.

Spolehlivým řešením je zaznamenat, co build skutečně přijímá ze sítě, místo toho, abyste to dodatečně rekonstruovali.

CRACI

CRACI vidí provoz přicházející do každého buildu, takže zaznamená skryté závislosti, které nástroje založené na lockfilu vynechávají. Když nemohl vidět všechno, například proto, že job povolil provoz obcházející jeho proxy rozpoznávající balíčky, uvede to stav úplnosti daného jobu. Jeho egress policy navíc určuje, ke kterým hostitelům se build vůbec může připojit, takže curl | sh na hostitele, kterého politika nepovoluje, selže. Viz SBOM z doby buildu.