Przejdź do treści
INDEKS ANALIZ BREACHROAD / NOTA TECHNICZNA

OpenTofu CVE-2026-74796 i 74797: kiedy tofu init przekracza granicę zaufania

Symlink w cache dostawców, kosztowne ZIP-y i starszy wyciek wartości sensitive pokazują, dlaczego katalog IaC oraz źródło pakietów są wejściem bezpieczeństwa.

MATERIAŁ PUBLICZNY
AUTOR
/ CEO Breachroad · OSCP · PNPT
PUBLIKACJA
16 sierpnia 2026
CZAS CZYTANIA
15 min czytania
TEMAT
Chmura, infrastruktura i DevSecOps
OpenTofu CVE-2026-74796 i 74797: kiedy tofu init przekracza granicę zaufania

16 sierpnia 2026 roku opublikowano rekordy CVE-2026-74796 i CVE-2026-74797 dotyczące OpenTofu. Pierwszy opisuje zapis poza katalogiem roboczym przez wcześniej przygotowane dowiązanie symboliczne w cache dostawców. Drugi dotyczy nadmiernego użycia CPU podczas przetwarzania złośliwie skonstruowanego archiwum ZIP dostawcy lub modułu. Tego samego dnia opublikowano też rekord CVE-2024-58375 dla starszego błędu statycznej ewaluacji, który mógł ujawniać wartości oznaczone jako sensitive w linii OpenTofu 1.8.0–1.8.2.

Daty wymagają precyzji. Upstreamowe advisory i poprawki dla części tych problemów pojawiły się przed 16 sierpnia; nowością tego dnia była publikacja rekordów CVE. Nie ma tu dowodu nowego incydentu ani masowej kampanii wykorzystującej OpenTofu. Jest za to użyteczna lekcja dla DevSecOps: tofu init przetwarza lokalny katalog, metadane zależności, archiwa z sieci oraz cache, a więc łączy kilka domen zaufania w procesie często uruchamianym z szerokim dostępem do chmury.

Advisory CVE-2026-74796 wskazuje poprawki w 1.11.7 i 1.10.10. CVE-2026-74797 jest naprawione od 1.11.4, a problem wartości sensitive od 1.8.3. Dla aktualnej gałęzi 1.11 wersja 1.11.7 lub nowsza obejmuje oba nowe problemy z inicjalizacją.

Co robi tofu init i dlaczego to ważne

Polecenie inicjalizacji przygotowuje katalog roboczy, wybiera moduły i dostawców, pobiera pakiety, weryfikuje informacje blokady i rozmieszcza zawartość w strukturze .terraform. W CI może działać przed planem, a na stacji operatora przed każdą zmianą środowiska. To nie jest pasywny parser konfiguracji: polecenie wykonuje operacje sieciowe i zapisuje pliki.

Jeżeli kod infrastruktury pochodzi z pull requestu, szablonu klienta, ćwiczenia rekrutacyjnego, repozytorium odzyskanego po incydencie albo zewnętrznego modułu, sam katalog roboczy nie powinien automatycznie otrzymywać zaufania. Uruchomienie init jest odpowiednikiem przetworzenia pakietu zależności i powinno odbywać się w kontrolowanym środowisku.

Najgroźniejszy błąd operacyjny to łączenie analizy nieznanego repozytorium z poświadczeniami produkcyjnymi. Nawet jeśli konkretne CVE nie wykonuje kodu dostawcy, zapis plików lub degradacja procesu może stać się elementem większego łańcucha. Minimalny token, izolowany workspace i brak sekretów w zmiennych procesu ograniczają konsekwencje nieoczekiwanej ścieżki.

CVE-2026-74796: dowiązanie w cache prowadzi poza drzewo

OpenTofu dopuszcza dowiązania symboliczne w lokalnym cache, ponieważ wpis katalogu roboczego może odwoływać się do zgodnego pakietu w cache globalnym. Podatna instalacja nie rozróżniała jednak bezpiecznego, już zgodnego wpisu od wcześniej przygotowanego dowiązania wskazującego inne miejsce. Gdy potrzebna była instalacja pakietu, zawartość mogła zostać zapisana w celu dowiązania poza katalogiem roboczym.

Atak wymaga konkretnego warunku: operator musi uruchomić tofu init w katalogu, którego zawartość może kontrolować atakujący, a proces musi mieć uprawnienia zapisu do docelowej lokalizacji. To nie jest zdalny zapis do dowolnego serwera bez interakcji. Ryzyko jest jednak realne w automatycznych pipeline’ach sprawdzających obce gałęzie lub paczki projektów.

Wpływ zależy od docelowej ścieżki i uprawnień procesu. Możliwe jest naruszenie integralności plików dostępnych dla runnera, przygotowanie trwałej zmiany w workspace albo uszkodzenie artefaktów później używanych przez inne zadanie. Nie należy automatycznie nazywać tego RCE; wykonanie wymagałoby dodatkowego elementu, który później załaduje lub uruchomi zapisany plik.

Poprawione wersje zgłaszają błąd, gdy istniejący wpis cache nie odpowiada oczekiwanej zawartości. Jeżeli zawartość już dokładnie pasuje, OpenTofu może wykorzystać ją bez modyfikacji. Zespół powinien pamiętać, że ustawienie TF_DATA_DIR przenosi wrażliwy obszar z .terraform do wskazanego katalogu.

CVE-2026-74797: archiwum jako rachunek za CPU

Drugi problem dotyczy ZIP-ów pobieranych podczas instalacji dostawcy lub modułu. Specjalnie przygotowana struktura archiwum mogła wymuszać nadmierną pracę CPU i opóźniać lub blokować zakończenie tofu init. Upstreamowe advisory wskazuje poprawkę od 1.11.4.

CVSS tego rekordu jest niższy niż dla zapisu przez symlink, ponieważ atak wymaga wpływu na źródło pakietu oraz pasywnej interakcji operatora lub automatyzacji uruchamiającej inicjalizację. Mimo to w CI koszt mnoży się przez liczbę runnerów, ponowienia i równoległe gałęzie. Pozornie „zawieszony init” może zużywać pulę wykonawców i opóźniać wszystkie wdrożenia.

Limit czasu joba jest potrzebny, ale stanowi ostatnią barierę. Ważniejsze są zaufane rejestry, lockfile poddany review, weryfikacja sum kontrolnych i kontrola źródeł modułów. Runner powinien mieć limity CPU i pamięci oraz nie powinien współdzielić zapisywalnego cache z zadaniami o różnym poziomie zaufania.

CVE-2024-58375: sensitive nie znaczy niewidoczne wszędzie

Trzeci rekord dotyczy eksperymentalnej w linii 1.8 statycznej ewaluacji źródeł modułów, wersji i konfiguracji backendu. Wartość oznaczona jako sensitive mogła zostać użyta w kontekście, w którym powinna wywołać błąd, a następnie ujawniona przez wynik konfiguracji lub diagnostykę. Advisory projektu ogranicza podatność do wersji 1.8.0, 1.8.1 i 1.8.2; wersja 1.8.3 dodaje jawne odrzucenie.

To błąd ważny koncepcyjnie. Oznaczenie sensitive kontroluje prezentację wartości w określonych ścieżkach narzędzia, ale nie jest szyfrowaniem ani systemem DLP. Sekret użyty do zbudowania adresu modułu, ścieżki backendu czy innego identyfikatora może przeniknąć do logów, nazw zasobów, błędów lub metadanych cache.

Sekrety powinny trafiać wyłącznie do wejść, które zostały zaprojektowane do ich przyjmowania. Pipeline musi również filtrować debug logi i artefakty planu, ponieważ nawet poprawiona walidacja jednego kontekstu nie usuwa wszystkich możliwości ekspozycji danych IaC.

Plan działania dla zespołu platformowego

Zidentyfikuj wersję OpenTofu w obrazie runnera, narzędziach deweloperskich i samodzielnych automatyzacjach. Dla linii 1.11 przejdź do 1.11.7 lub nowszej. Jeżeli organizacja pozostaje na 1.10, zastosuj wydanie 1.10.10 albo późniejszą wspieraną poprawkę. Usuń obrazy zawierające starszy binarny plik z prywatnego registry, aby pipeline nie mógł wrócić do podatnej wersji.

Traktuj pull request z kodem IaC jako niezaufane wejście. Job walidacyjny nie powinien otrzymywać poświadczeń produkcyjnych ani dostępu zapisu do wspólnego cache. Używaj efemerycznych runnerów lub czystego workspace, montuj repozytorium z minimalnymi prawami i oddzielaj cache gałęzi zaufanych od forków.

Przejrzyj TF_DATA_DIR, .terraform, globalny cache pluginów oraz mechanizmy ich zachowywania między jobami. Szukaj dowiązań symbolicznych, nietypowych właścicieli, zmian celu i wpisów tworzonych przez niezaufaną gałąź. Nie usuwaj automatycznie materiału dowodowego, jeżeli analiza jest częścią reakcji na incydent.

Wymuś źródła modułów i dostawców zgodne z polityką. Lockfile powinien być elementem review, a zmiana źródła, sumy lub wersji powinna generować wyraźny sygnał. Egress runnera ogranicz do potrzebnych rejestrów. Dzięki temu przejęcie przypadkowego hosta pobierania nie staje się automatycznie wejściem do każdego środowiska.

Detekcja i testy

Alertuj na nietypowo długie tofu init, wysokie użycie CPU, powtarzające się pobrania i nagłe zmiany liczby plików w cache. Rejestruj wersję OpenTofu, skrót lockfile, źródło modułu, runner i commit. Nie zapisuj wartości zmiennych wrażliwych.

Test regresji dla symlinków powinien potwierdzać, że inicjalizacja odrzuca niezgodny istniejący wpis bez zapisu poza kontrolowany katalog. Test archiwum powinien działać wyłącznie w izolowanym runnerze z limitem czasu i zasobów. Test danych wrażliwych powinien oczekiwać jawnego błędu, gdy sekret trafia do statycznie ewaluowanego źródła lub backendu.

Fakty i wnioski Breachroad

Faktem jest, że rekordy opublikowane 16 sierpnia opisują trzy różne problemy: zapis przez symlink, zużycie CPU przez ZIP i ekspozycję wartości sensitive w starszej linii 1.8. Upstream podaje poprawki odpowiednio w 1.11.7/1.10.10, 1.11.4 oraz 1.8.3. Nie ma w tych źródłach dowodu masowego wykorzystania.

Wnioskiem Breachroad jest traktowanie inicjalizacji IaC jako operacji na łańcuchu dostaw, a nie niewinnego kroku przygotowawczego. Bezpieczny proces łączy aktualne narzędzie z efemerycznym runnerem, rozdzielonym cache, kontrolą źródeł i poświadczeniami o minimalnym zakresie.

Zespołom platformowym polecamy szkolenia cyberbezpieczeństwa dla organizacji, obejmujące granice zaufania w CI/CD i IaC. Konfigurację środowisk można także zweryfikować przez audyt bezpieczeństwa chmury.

UDOSTĘPNIJ / KOPIUJ