CVE-2026-41084
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 37 - wyżej niż 37% wszystkich znanych CVE
Streszczenie
W Apache Airflow wykryto błąd w zbiorczym API instancji zadań (PATCH/DELETE /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances), który powodował, że autoryzacja była sprawdzana względem dag_id z ścieżki URL, podczas gdy operacje wykonywane były na dag_id/dag_run_id z pól encji w ciele żądania. Uwierzytelniony użytkownik z uprawnieniami do edycji jednego DAG mógł modyfikować stan instancji zadań w innym DAG, podając autoryzowany DAG w ścieżce URL a docelowy DAG w ciele żądania. Problem dotyczy wdrożeń polegających na izolacji stanu instancji zadań między zespołami na podstawie uprawnień do DAG. Łatka dostępna w wersji apache-airflow 3.2.2.
Ocena ryzyka
Uwierzytelniony atakujący może modyfikować stan instancji zadań w DAG-ach, do których nie ma uprawnień, co może prowadzić do naruszenia izolacji danych i nieautoryzowanych zmian w przepływach pracy.
Rekomendacja
Zaktualizuj Apache Airflow do wersji 3.2.2 lub nowszej.
Inne podatności w Apache Airflow
Zobacz wszystkie- CVE-2025-68438Wysokie
W Apache Airflow przed wersją 3.1.6, gdy renderowane pola szablonów w Dag przekraczają [core] max_templated_field_length, wrażliwe wartości mogły być ujawniane w postaci czystego tekstu w interfejsie Rendered Templates UI. Stało się tak, ponieważ serializacja tych pól używała instancji maskującej sekrety, która nie zawierała wzorców mask_secret() zarejestrowanych przez użytkownika, więc sekrety nie były niezawodnie maskowane przed obcięciem i wyświetleniem. Zaleca się aktualizację do wersji 3.1.6 lub nowszej.
- CVE-2026-33264Krytyczne
Podatność w metodzie `BaseSerialization.deserialize()` umożliwia nieograniczone wywołanie `import_string()` na ścieżkach klas kontrolowanych przez atakującego. Gdy Scheduler lub API Server ładuje serializowany DAG, autor DAG-a może osadzić złośliwy trigger, co prowadzi do zdalnego wykonania kodu na tych procesach, naruszając granicę bezpieczeństwa Airflow.
- CVE-2026-42252Krytyczne
Dokumentacja Apache Airflow zawierała przykład kodu `BashOperator` bez odpowiedniego cytowania, co umożliwiało wstrzyknięcie metaznaków powłoki przez pole `conf` w API wyzwalania DAG. Autoryzowany użytkownik z uprawnieniem `Dag.can_trigger` mógł wykonać dowolne polecenia na workerze.
- CVE-2026-68971Średnie
W Apache Airflow, endpoint materializacji zasobów (`POST /api/v2/assets/{asset_id}/materialize`) oraz sprawdzanie wyników XCom w `wait_dag_run_until_finished` autoryzowały docelowy Dag bez uwzględnienia zespołu, w przeciwieństwie do innych miejsc autoryzacji. W trybie wielozespołowym z menedżerem autoryzacji uwzględniającym zespoły, uwierzytelniony użytkownik z jednego zespołu mógł wywołać uruchomienia Dagów należących do innego zespołu, podając własne `dag_run_id` i `conf`, oraz mógł odczytać wartości XCom innego zespołu. Deployments używające menedżera FAB nie są dotknięte, ponieważ nie obsługuje on wielu zespołów. Zaleca się aktualizację do apache-airflow 3.3.1 lub nowszej.
- CVE-2026-68970Średnie
W Apache Airflow, Task SDK nie maskował zawartości Zmiennej, której wartość JSON jest listą, więc sekrety przechowywane w tej formie pojawiały się w postaci jawnej w logach zadań i w interfejsie Rendered Templates. Maskowanie było stosowane tylko, gdy zdeserializowana wartość była stringiem lub słownikiem; lista na najwyższym poziomie nie pasowała do żadnego z tych przypadków i była zwracana bez maskowania. Każdy uwierzytelniony użytkownik, który może czytać logi lub wyrenderowane szablony zadania odwołującego się do takiej Zmiennej, mógł odzyskać wartości, bez specjalnej konfiguracji. Jest to odpowiednik CVE-2026-59244 dla list, którego poprawka obejmowała tylko przypadek słownika, więc wdrożenia, które zaktualizowały się w odpowiedzi na to ostrzeżenie, pozostają dotknięte i muszą zaktualizować się ponownie. Zaleca się aktualizację do apache-airflow 3.3.1 lub nowszej.
- CVE-2026-68969Średnie
Podatność w Apache Airflow powoduje zapisywanie wartości zmiennych (Variables) oraz zawartości pola `extra` w połączeniach (Connections) do dziennika audytowego w postaci jawnego tekstu, gdy są one przesyłane przez punkty końcowe zbiorcze (`PATCH /api/v2/variables` i `PATCH /api/v2/connections`). Maskowanie w dzienniku audytowym rozpoznaje tylko pola najwyższego poziomu, a żądanie zbiorcze zagnieżdża encje dwa poziomy niżej, więc maskowanie nie jest stosowane. Każdy uwierzytelniony użytkownik z dostępem do odczytu dziennika audytowego (niekoniecznie mający uprawnienia do odczytu Variables lub Connections) może odzyskać te sekrety w oryginalnej formie, a kopia `extra` połączenia jest przechowywana w logu bez szyfrowania, podczas gdy tabela połączeń szyfruje ją.
- CVE-2026-68968Wysokie
API Backfill w Apache Airflow autoryzował żądanie względem identyfikatora Dag podanego przez wywołującego, gdy segment ścieżki `backfill_id` nie mógł zostać sparsowany. Zależność autoryzacji parsowała go funkcją `int()`, podczas gdy procedura obsługi trasy parsowała go jako pydantic `NonNegativeInt`, który akceptuje wartości odrzucane przez `int()` (`1.0` jest konwertowane na `1`); FastAPI rozwiązuje zależności przed walidacją punktu końcowego, więc działały na różnych Dagach. Uwierzytelniony użytkownik z uprawnieniami edycji dowolnego pojedynczego Dag mógł odczytywać, wstrzymywać i anulować backfille należące do innych Dagów, w tym przenosić kolejkowane uruchomienia innego Dag do stanu `failed`. Nie jest wymagana żadna niestandardowa konfiguracja, a identyfikatory backfill są sekwencyjne, więc znalezienie celu jest trywialne. Zaleca się aktualizację do apache-airflow 3.3.1 lub nowszego, który parsuje identyfikator backfill tym samym typem, który deklarują trasy.
- CVE-2026-68076Średnie
W Apache Airflow backend sekretów oparty na zmiennych środowiskowych rozwiązywał połączenia lub zmienne przypisane do zespołu z niewłaściwego zakresu zespołu. Zabezpieczenie zapobiegające temu działało tylko wtedy, gdy nie podano zakresu zespołu, a jego wzorzec nie mógł dopasować nazwy zespołu zawierającej podkreślenie. W trybie wielozespołowym uwierzytelniony użytkownik jednego zespołu mógł rozwiązać połączenie innego zespołu i uwierzytelnić się na zewnątrz przy użyciu poświadczeń tego zespołu.
- CVE-2026-67587Wysokie
Task SDK w Apache Airflow odtwarzał obiekt `Callback` z danych serializowanych, ponownie uruchamiając jego konstruktor, który importuje moduł o nazwie ze ścieżki przechowywanego callbacka. Ponieważ `SyncCallback` jest klasą Airflow, przechodzi domyślną listę dozwolonych klas `allowed_deserialization_classes`, więc zaostrzenie tego ustawienia nie pomaga. Autor Dag — który kontroluje `next_kwargs` instancji zadania przez API wykonywania zadań — może spowodować import dowolnego modułu w procesie schedulera, gdy scheduler przeszukuje wartości z `awaiting_input` i deserializuje tę wartość. Nie jest wymagana żadna niestandardowa konfiguracja; przeszukiwanie działa bezwarunkowo. Wersje przed 3.3.0 nie są dotknięte: klasa istniała, ale przeszukiwanie schedulera, które do niej dociera, nie istniało. Jest to oddzielna ścieżka kodu od CVE-2026-58076 i CVE-2026-67260, które obejmują inne gadżety prowadzące do deserializacji — zastosowanie którejkolwiek z tych poprawek nie rozwiązuje tego problemu. Zaleca się aktualizację do apache-airflow 3.3.1 lub nowszego.
- CVE-2026-67260Wysokie
Apache Airflow 3.3.0 zawiera podatność w mechanizmie przetwarzania zadań typu human-in-the-loop, gdzie deserializacja next_kwargs bez listy dozwolonych klas pozwala autorowi DAG-a na import dowolnego modułu i utworzenie obiektu w procesie schedulera lub zakończenie jego działania. Wymagana jest aktualizacja do wersji 3.3.1 lub nowszej.
Oryginalny opis (angielski, źródło NVD)
A bug in Apache Airflow's bulk Task Instances API (`PATCH/DELETE /api/v2/dags/{dag_id}/dagRuns/{dag_run_id}/taskInstances`) evaluated authorization against the `dag_id` resolved from the URL path while operating on the `dag_id` / `dag_run_id` extracted from request-body entity fields. An authenticated UI/API user with edit permission on one Dag could mutate Task Instance state in any other Dag by keeping the authorized Dag's ID in the URL path and naming the target Dag's IDs in the request body entities. Affects deployments that rely on per-Dag edit-scope to keep Task Instance state isolated between teams. Users are advised to upgrade to `apache-airflow` 3.2.2 or later.

