Narzędzie datamodel-code-generator w wersjach od 0.11.6 do poniżej 0.64.0 pozwala atakującemu na wstrzyknięcie i wykonanie dowolnego kodu Python poprzez kontrolowane rozszerzenia schematu x-python-import lub customTypePath. Podatność jest groźna, ponieważ złośliwy kod wykonuje się automatycznie w momencie importowania wygenerowanego modelu.
▸ Pokaż oryginał (EN)
datamodel-code-generator generates Pydantic v2 models, dataclasses, TypedDict, and msgspec.Struct from OpenAPI, JSON Schema, GraphQL, Avro, Protobuf, and raw JSON, YAML, or CSV. From 0.11.6 until 0.64.0, datamodel-code-generator allows attacker-controlled x-python-import or customTypePath schema extensions to reach src/datamodel_code_generator/parser/jsonschema.py and generated import handling through Import.from_full_path and Imports.create_line in src/datamodel_code_generator/imports.py, allowing a newline to break out of an import statement and execute Python code when the generated model is imported. This issue is fixed in version 0.64.0.
Atakujący może umieścić w schemacie OpenAPI, JSON Schema lub innym obsługiwanym formacie złośliwą wartość w polach rozszerzających x-python-import lub customTypePath. Wartości te trafiają do logiki obsługi importów w plikach parser/jsonschema.py oraz imports.py, gdzie są przetwarzane przez funkcje Import.from_full_path i Imports.create_line. Wstrzyknięcie znaku nowej linii (newline) do treści instrukcji importu pozwala uciec z kontekstu instrukcji import i osadzić dowolny kod Python w wygenerowanym pliku modelu. Gdy ofiara następnie zaimportuje wygenerowany plik modelu, osadzony kod zostaje wykonany.
Atakujący może doprowadzić do wykonania dowolnego kodu Python w środowisku ofiary w momencie importowania wygenerowanego modelu, co może skutkować pełnym przejęciem kontroli nad systemem, utratą poufności danych lub naruszeniem integralności środowiska.
Należy zaktualizować datamodel-code-generator do wersji 0.64.0 lub nowszej. Patch dostępny jest w repozytorium projektu (commit 577d49569c2254c371a97e495020ae2238a73b84). Do czasu aktualizacji należy unikać generowania modeli na podstawie schematów pochodzących z niezaufanych źródeł.
datamodel-code-generator w wersjach od 0.11.6 do 0.63.x (podatność naprawiona w wersji 0.64.0)
Podatność dotyczy etapu generowania kodu — złośliwy payload nie jest aktywowany podczas samego wywołania generatora, lecz dopiero w momencie importowania wygenerowanego pliku przez docelową aplikację. Szczególnie narażone są środowiska CI/CD oraz narzędzia automatycznie generujące i importujące modele ze schematów pobieranych z zewnętrznych źródeł.
CVSS:3.1/AV:N/AC:H/PR:N/UI:R/S:U/C:H/I:H/A:HKoxudaxi Datamodel Code Generator
APPKoxudaxi0.11.6 – 0.64.0 (bez)
Powiązane podatności
datamodel-code-generator: wstrzyknięcie kodu Python przez default_factory
RCE w datamodel-code-generator poprzez niezabezpieczoną interpolację walidatorów
SSRF w datamodel-code-generator poprzez nieblokowane zewnętrzne $ref
Path traversal w datamodel-code-generator umożliwia odczyt dowolnych plików lokalnych
SSRF przez DNS rebinding w datamodel-code-generator (przed 0.63.0)