Biblioteka datamodel-code-generator w wersjach od 0.17.0 do 0.60.1 pozwala na wstrzyknięcie i wykonanie dowolnego kodu Python poprzez niezaufane wartości default_factory osadzone w generowanych modelach. Podatność jest szczególnie niebezpieczna w środowiskach automatycznie przetwarzających schematy JSON/OpenAPI pochodzące z zewnętrznych źródeł.
▸ 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.17.0 until 0.60.2, datamodel-code-generator preserves attacker-controlled default_factory values in src/datamodel_code_generator/parser/jsonschema.py through JsonSchemaObject.init and get_field_extras and emits them into Field(default_factory=...) or field(default_factory=...), allowing Python expression execution when the generated model is imported. This issue is fixed in version 0.60.2.
Biblioteka przetwarza wejściowe schematy (np. OpenAPI, JSON Schema) i generuje na ich podstawie kod Python. Funkcje JsonSchemaObject.init oraz get_field_extras w pliku src/datamodel_code_generator/parser/jsonschema.py przepuszczają kontrolowane przez atakującego wartości pola default_factory bezpośrednio do wygenerowanego kodu, wstawiając je jako argumenty Field(default_factory=...) lub field(default_factory=...). Złośliwe wyrażenia Python osadzone w ten sposób w wygenerowanym modelu są wykonywane automatycznie w momencie importowania wygenerowanego pliku.
Atakujący dostarczający spreparowany schemat może doprowadzić do wykonania dowolnego kodu Python (RCE) w środowisku, które importuje wygenerowany model — co może skutkować pełnym przejęciem kontroli nad procesem, wyciekiem danych lub naruszeniem integralności systemu.
Należy zaktualizować datamodel-code-generator do wersji 0.60.2, w której błąd został naprawiony (commit 17fc235e234cbcfaaadef8c74cb72c9687db0d1d). Do czasu aktualizacji należy przetwarzać wyłącznie schematy pochodzące z zaufanych źródeł.
datamodel-code-generator w wersjach od 0.17.0 do 0.60.1 włącznie
Poprawka dostępna w wersji 0.60.2 wydanej jako release na GitHub. Publiczny proof-of-concept dostępny pod adresem wskazanym w referencjach (gist.github.com/thegr1ffyn).
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:HKoxudaxi Datamodel Code Generator
APPKoxudaxi0.17.0 – 0.60.2 (bez)
Powiązane podatności
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)
Code injection w datamodel-code-generator poprzez rozszerzenia schematu