Luka o krytyczności 9.1 w skali CVSS (Common Vulnerability Scoring System — skala 0-10 oceniająca powagę luki) została zidentyfikowana w Apache Airflow [^1]. Problem, oznaczony jako CVE (Common Vulnerabilities and Exposures, identyfikator publicznie znanej luki) CVE-2026-42252, nie leży w samym kodzie oprogramowania. Jego źródłem jest oficjalna dokumentacja projektu, która zawierała niebezpieczny przykład kodu [^2] [^3].
Przykład, który miał ułatwić pracę programistom, stał się wektorem ataku umożliwiającym wstrzyknięcie poleceń powłoki [^4]. Deweloperzy, którzy skopiowali wzorzec bezpośrednio do swoich wdrożeń, nieświadomie otworzyli drogę do potencjalnego zdalnego wykonania kodu (RCE — Remote Code Execution) na serwerach roboczych Airflow [^5]. Problem dotyczy zwłaszcza środowisk, gdzie wielu użytkowników o różnych uprawnieniach może wyzwalać zadania [^6].
TL;DR
- Produkt: Apache Airflow, popularna platforma do orkiestracji przepływów pracy.
- Wektor: Wstrzyknięcie poleceń powłoki poprzez spreparowane parametry przekazywane do zadania (DAG). Luka wynika z kopiowania niezabezpieczonego przykładu kodu z oficjalnej dokumentacji [^2] [^3].
- Identyfikator: CVE-2026-42252, ocena CVSS 9.1 (Krytyczna).
- Wskaźnik kompromitacji: Obecność w kodzie wzorca
BashOperator(bash_command="echo value: {{ dag_run.conf['conf1'] }}")bez odpowiedniego zabezpieczenia danych wejściowych. - Kogo dotyczy: Organizacje, których zespoły deweloperskie mogły oprzeć swój kod na podatnym przykładzie z dokumentacji Airflow [^7]. Szczególnie narażone są wdrożenia wielozespołowe, gdzie użytkownicy o niższych uprawnieniach mogą wyzwalać zadania [^8].
- Pierwszy ruch: Audyt bazy kodu wszystkich zadań (DAGs) w poszukiwaniu podatnego wzorca i natychmiastowe wdrożenie sanityzacji danych wejściowych.
Wektor ataku
Problem ma swoje źródło w sekcji dokumentacji Apache Airflow core-concepts/dag-run.html, która opisywała przekazywanie parametrów do zadań [^2]. Zawarto tam przykład użycia BashOperator w następującej formie:
BashOperator(bash_command="echo value: {{ dag_run.conf['conf1'] }}")
Ten fragment kodu był prezentowany bez żadnych ostrzeżeń dotyczących konieczności sanityzacji lub cytowania danych wejściowych pochodzących od użytkownika [^9]. Szablon Jinja2 {{ dag_run.conf['conf1'] }} wstawia wartość parametru conf1 bezpośrednio do polecenia powłoki. Jeśli deweloper skopiował ten wzorzec do produkcyjnego zadania (DAG), stworzył podatność na wstrzyknięcie poleceń [^6].
Uwierzytelniony użytkownik z uprawnieniami do wyzwalania takiego zadania (Dag.can_trigger) mógł przekazać jako wartość parametru conf ciąg zawierający metaznaki powłoki [^10]. Po wstawieniu do bash_command taki parametr mógł uruchomić niezamierzone polecenie w kontekście użytkownika wykonującego zadanie [^5]. Może to prowadzić do zdalnego wykonania kodu, nieautoryzowanego dostępu i wycieku danych [^11] [^12]. Celowo nie publikujemy gotowego ładunku.
Telemetria wskazuje, że jest to ta sama klasa problemu, która była przedmiotem wcześniejszych poprawek w dokumentacji, zidentyfikowanych jako CVE-2025-50213 i CVE-2025-27018 [^13]. To pokazuje, że błędy w dokumentacji mogą być równie problematyczne co luki w samym oprogramowaniu.
Wskaźniki kompromitacji
Kompromitacja nie jest tutaj związana z konkretnymi adresami IP czy hashami plików, lecz z obecnością podatnego wzorca w kodzie źródłowym zadań Airflow. Zespoły bezpieczeństwa i deweloperzy powinni przeszukać swoje repozytoria w poszukiwaniu następującego lub podobnego użycia BashOperator:
Podatny wzorzec kodu:
# Wzorzec podatny na wstrzyknięcie poleceń
from airflow.operators.bash import BashOperator
BashOperator(
task_id='przykladowe_zadanie',
bash_command="echo value: {{ dag_run.conf['nazwa_parametru'] }}"
)
W logach API i historii uruchomień należy szukać parametrów conf zawierających metaznaki powłoki, nietypowe przekierowania lub odwołania sieciowe. Obecność podatnego wzorca kodu bez walidacji danych wejściowych jest sygnałem do pilnego przeglądu, ale sama nie potwierdza wykorzystania luki.
Co zrobić w 24-48h
Rekomendowane podejście zakłada natychmiastowe działania prewencyjne i naprawcze. Poniższe kroki nie zastępują pełnego audytu bezpieczeństwa, ale stanowią kluczowy pierwszy ruch.
-
Audyt kodu: Należy natychmiast przeprowadzić audyt wszystkich zadań (DAGs) w środowiskach Apache Airflow. Zaleca się użycie narzędzi takich jak
greplub podobnych do wyszukania w repozytoriach kodu wszystkich wystąpieńBashOperator, które dynamicznie budują polecenia w oparciu odag_run.conflub inne zewnętrzne dane wejściowe. -
Wdrożenie poprawek: Wszędzie tam, gdzie zidentyfikowano podatny wzorzec, należy wprowadzić jawne cytowanie powłoki (shell-quoting). Poprawiona dokumentacja Airflow zawiera już bezpieczny przykład i ostrzeżenie [^14]. Zamiast bezpośredniego wstawiania wartości, zaleca się użycie zmiennych środowiskowych i pozwolenie, aby Airflow poprawnie je zabezpieczył.
Bezpieczny wzorzec:
from airflow.operators.bash import BashOperator BashOperator( task_id='bezpieczne_zadanie', bash_command='echo "value: $INPUT_VALUE"', env={'INPUT_VALUE': "{{ dag_run.conf['nazwa_parametru'] }}"} ) -
Aktualizacja dokumentacji: Chociaż problem leży w kodzie aplikacji, a nie w samym Airflow, zaleca się aktualizację do wersji
apache-airflow3.2.2 lub nowszej [^15]. Dzięki temu zespoły będą miały dostęp do poprawionej, bezpiecznej wersji dokumentacji dostarczanej z pakietem, co może zapobiec powielaniu błędu w przyszłości. -
Kontekst polski: Wiele polskich firm z sektora e-commerce, finansów i data science używa Apache Airflow do orkiestracji procesów ETL i zadań analitycznych. Zespoły deweloperskie w Polsce powinny potraktować ten alert priorytetowo. W kontekście nadchodzących wymogów dyrektywy NIS2 (unijna dyrektywa o bezpieczeństwie sieci), zarządzanie podatnościami wynikającymi nawet z dokumentacji staje się kluczowym elementem zgodności i odporności organizacji.
// Komentarze ...
Dodaj komentarz