Strona główna / Blog / Flatpak: GHSA bez CVE

Blog · analiza

Flatpak CVE-2026-90616: GHSA miesiąc bez CVE, potem nowy identyfikator — jak nie zgubić sandbox escape w systemie opartym na CVE

Flatpak CVE-2026-90616 jest mniej interesujący jako „nowa podatność” niż jako evolution story danych vulnerability intelligence. Pierwotny GitHub Security Advisory GHSA-8688-9x26-hhxj opublikowano 11 sierpnia 2026 i już wtedy opisywał poważny sandbox escape: złośliwa aplikacja przez manipulację symlinkami mogła uzyskać arbitrary read/write do plików hosta i potencjalnie RCE; advisory wskazywał poprawkę w 1.18.1 i backporty 1.16.x. Pole CVE było puste („CVE ID requested”) — CVE-2026-90616 pojawił się dopiero 12 września. To około miesiąca, w którym organizacja konsumująca wyłącznie CVE mogła nie mieć stabilnego identyfikatora, mimo że maintainer miał publiczny advisory, patch i regression tests.

CVE-2026-90616 / GHSA-8688-9x26-hhxj: symlink w app data → bwrap --bind rozwiązuje symlink → montuje niezamierzoną część host filesystemu do sandboxa → arbitrary read/write, potencjalnie RCE.
Timeline: GHSA + patch 11.08; CVE dopiero 12.09 — blind spot ~miesiąca dla CVE-only ingestion.

Technicznie i blind spot CVE-only

Flatpak bind-mountuje katalogi danych aplikacji do sandboxa; w niektórych ścieżkach elementy katalogu są kontrolowane przez aplikację. Zastąpienie elementu symlinkiem do lokalizacji na hoście sprawia, że bwrap --bind przekazuje ścieżkę do kernela, a rozwiązywanie symlinków montuje niezamierzoną część filesystemu — złośliwa aplikacja uzyskuje read/write poza granicą izolacji. To uderza w security property produktu: app sandbox cannot arbitrarily read/write host files. Pipeline CVE feed → NVD/CPE → scanner → ticket ma blind spot: 11.08 maintainer publikuje GHSA i fix, ale bez konsumpcji GHSA/OSV/vendor advisories organizacja może nie utworzyć findingu do przypisania CVE. Identyfikator jest kluczem do SLA, deduplikacji, CMDB enrichment, patch tickets, dashboardów, raportów compliance, exception workflows — brak CVE praktycznie znaczy „problem nie istnieje w systemie”, mimo że istnieje i ma patch.

CVE assignment jako evolution story i patch lineage

Gdy 12.09 pojawia się CVE-2026-90616, dojrzały VE nie tworzy drugiego findingu — wykonuje korelację GHSA-8688-9x26-hhxj ↔ CVE-2026-90616 i wzbogaca istniejący rekord. To wymaga identity graph (GHSA, CVE, OSV ID, vendor advisory ID, patch commit, package/ecosystem, affected range), nie tabeli z jednym primary ID. Patch lineage jest tu ważniejszy niż sam CVE: patched 1.18.1, konkretny commit, regression tests, backporty 1.16.x, dodatkowe commity libglnx przy backporcie. Proste version >= 1.18.1 = fixed jest poprawne dla głównej linii, ale nie dla LTS z backportami — w Debian/RHEL-like zobaczymy numer pakietu starszy niż upstream fixed, z backportowanym patchem. Closure wymaga obsługi upstream version ALBO vendor backport/package advisory.

Błędy, weryfikacja, program

False positive: scanner patrzy tylko na upstream version i oznacza distro package jako podatny mimo backportu. False negative: system patrzy tylko na CVE i przez miesiąc nie widzi GHSA. Wspólna przyczyna: za ubogi model provenance i identity. Verification: upstream — Flatpak 1.18.1+; backport — vendor advisory/changelog i mapowanie do commitów; property test (krytyczne środowisko) — kontrolowany symlink w app data nie powoduje bind-mountu niezamierzonej ścieżki hosta; regression evidence — testy maintainera do korelacji. Finding zamknięty nie „bo CVE zniknęło ze skanera”, lecz bo podatna właściwość nie występuje w buildzie. Program VM potrzebuje ingestion z wielu źródeł (vendor/maintainer advisories, GHSA/OSV, CVE/NVD, distro trackery, CSAF/VEX) i korelacji identyfikatorów do jednego vulnerability object — dla sytuacji GHSA-first→CVE-later, CVE-first→advisory-later, upstream fixed→distro backport, CVE split/merge/dispute. W źródłach brak potwierdzenia active exploitation.

Powiązane na blogu

Źródła

Nota redakcyjna: stan informacji 14 września 2026. CVE-2026-90616 (Flatpak): sandbox escape opublikowany jako GHSA 11.08, CVE dopiero 12.09; patch 1.18.1 + backporty 1.16.x. Brak potwierdzenia active exploitation. Artykuł podkreśla korelację identyfikatorów i patch lineage upstream vs distro.

Zapamiętaj jedno

CVE nie jest początkiem istnienia podatności — to jeden z identyfikatorów nadawanych w określonym momencie disclosure. Program monitorujący dopiero od publikacji CVE bywa spóźniony, choć maintainer dawno opublikował patch. Właściwym obiektem nie jest „CVE row”, lecz security property + affected component + advisory graph + patch lineage + verification evidence.