Airflow Configuration

Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Plik konfiguracyjny

Apache Airflow generuje plik konfiguracyjny na wszystkich maszynach Airflow o nazwie airflow.cfg w katalogu domowym użytkownika Airflow. Plik konfiguracyjny zawiera informacje konfiguracyjne i może zawierać interesujące i wrażliwe informacje.

Istnieją dwie metody dostępu do tego pliku: poprzez skompromitowanie jakiejś maszyny Airflow lub uzyskanie dostępu do konsoli internetowej.

Należy zauważyć, że wartości wewnątrz pliku konfiguracyjnego mogą nie być używane, ponieważ można je nadpisać, ustawiając zmienne środowiskowe, takie jak AIRFLOW__WEBSERVER__EXPOSE_CONFIG: 'true'.

Jeśli masz dostęp do pliku konfiguracyjnego w serwerze internetowym, możesz sprawdzić rzeczywistą konfigurację działającą na tej samej stronie, na której wyświetlana jest konfiguracja. Jeśli masz dostęp do jakiejś maszyny w środowisku Airflow, sprawdź środowisko.

Należy sprawdzić niektóre interesujące wartości podczas czytania pliku konfiguracyjnego:

[api]

  • access_control_allow_headers: Wskazuje dozwolone nagłówki dla CORS

  • access_control_allow_methods: Wskazuje dozwolone metody dla CORS

  • access_control_allow_origins: Wskazuje dozwolone źródła dla CORS

  • auth_backend: Zgodnie z dokumentacją istnieje kilka opcji konfiguracji dostępu do interfejsu API:

  • airflow.api.auth.backend.deny_all: Domyślnie nikt nie ma dostępu do interfejsu API

  • airflow.api.auth.backend.default: Każdy może uzyskać do niego dostęp bez uwierzytelniania

  • airflow.api.auth.backend.kerberos_auth: Konfiguracja uwierzytelniania kerberos

  • airflow.api.auth.backend.basic_auth: Uwierzytelnianie podstawowe

  • airflow.composer.api.backend.composer_auth: Używa uwierzytelniania kompozytora (GCP) (od tutaj).

  • composer_auth_user_registration_role: Wskazuje rolę, jaką użytkownik kompozytora otrzyma w Airflow (Op domyślnie).

  • Możesz również stworzyć własną metodę uwierzytelniania za pomocą Pythona.

  • google_key_path: Ścieżka do klucza konta usługi GCP

[atlas]

  • password: Hasło Atlas

  • username: Nazwa użytkownika Atlas

[celery]

  • flower_basic_auth : Dane uwierzytelniające (user1:password1,user2:password2)

  • result_backend: Adres URL Postgres, który może zawierać dane uwierzytelniające.

  • ssl_cacert: Ścieżka do pliku cacert

  • ssl_cert: Ścieżka do pliku certyfikatu

  • ssl_key: Ścieżka do pliku klucza

[core]

  • dag_discovery_safe_mode: Domyślnie włączone. Podczas odkrywania DAG-ów ignorowane są pliki, które nie zawierają ciągów DAG i airflow.

  • fernet_key: Klucz do przechowywania zaszyfrowanych zmiennych (symetryczny)

  • hide_sensitive_var_conn_fields: Domyślnie włączone, ukrywa wrażliwe informacje o połączeniach.

  • security: Moduł zabezpieczeń do użycia (na przykład kerberos)

[dask]

  • tls_ca: Ścieżka do pliku ca

  • tls_cert: Ścieżka do pliku certyfikatu

  • tls_key: Ścieżka do pliku klucza TLS

[kerberos]

  • ccache: Ścieżka do pliku ccache

  • forwardable: Domyślnie włączone

[logging]

  • google_key_path: Ścieżka do pliku JSON z danymi uwierzytelniającymi GCP.

[secrets]

  • backend: Pełna nazwa klasy backendu tajemnic do włączenia

  • backend_kwargs: Parametr backend_kwargs jest ładowany do słownika i przekazywany do init klasy backendu tajemnic.

[smtp]

  • smtp_password: Hasło SMTP

  • smtp_user: Użytkownik SMTP

[webserver]

  • cookie_samesite: Domyślnie jest to Lax, więc jest to już najmniejsza możliwa wartość

  • cookie_secure: Ustawia flagę secure na pliku cookie sesji

  • expose_config: Domyślnie jest False, jeśli jest true, konfiguracja może być odczytana z konsoli internetowej

  • expose_stacktrace: Domyślnie jest True, pokazuje ślad pythona (potencjalnie przydatne dla atakującego)

  • secret_key: Jest to klucz używany przez flask do podpisywania plików cookie (jeśli go masz, możesz udawać dowolnego użytkownika w Airflow)

  • web_server_ssl_cert: Ścieżka do certyfikatu SSL

  • web_server_ssl_key: Ścieżka do klucza SSL

  • x_frame_enabled: Domyślnie jest True, więc domyślnie nie jest możliwe klikanie w ramki (clickjacking)

Uwierzytelnianie internetowe

Domyślnie uwierzytelnianie internetowe jest określone w pliku webserver_config.py i jest skonfigurowane jako

AUTH_TYPE = AUTH_DB

Co oznacza, że uwierzytelnianie jest sprawdzane w stosunku do bazy danych. Jednak inne konfiguracje są możliwe, takie jak

AUTH_TYPE = AUTH_OAUTH

Aby pozostawić uwierzytelnianie stronom trzecim.

Jednak istnieje również opcja umożliwienia dostępu anonimowym użytkownikom, ustawiając następujący parametr na żądaną rolę:

AUTH_ROLE_PUBLIC = 'Admin'
Naucz się hakować AWS od zera do bohatera z htARTE (HackTricks AWS Red Team Expert)!

Inne sposoby wsparcia HackTricks:

Last updated