Narzędzie datamodel-code-generator w wersjach od 0.9.1 do 0.61.0 jest podatne na SSRF — atakujący może skłonić aplikację do wykonania żądań HTTP/HTTPS do dowolnych serwerów poprzez osadzenie złośliwych URL-i w polach $ref schematu JSON. Podatność jest szczególnie groźna, ponieważ mechanizm blokowania zdalnych referencji (--allow-remote-refs) mógł jedynie ostrzegać zamiast faktycznie blokować zapytania.
▸ 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.9.1 until 0.61.0, datamodel-code-generator silently dereferences attacker-controlled JSON Schema $ref HTTP or HTTPS URLs in src/datamodel_code_generator/parser/jsonschema.py through _get_ref_body, and the --allow-remote-refs gate can warn instead of blocking, allowing server-side request forgery through src/datamodel_code_generator/http.py. This issue is fixed in version 0.61.0.
Podczas przetwarzania schematu JSON lub OpenAPI narzędzie automatycznie rozwiązuje referencje $ref wskazujące na zewnętrzne zasoby HTTP/HTTPS za pomocą funkcji _get_ref_body w pliku src/datamodel_code_generator/parser/jsonschema.py. Żądania sieciowe są realizowane przez moduł src/datamodel_code_generator/http.py. Flaga --allow-remote-refs, która powinna uniemożliwiać pobieranie zdalnych zasobów, w praktyce mogła jedynie generować ostrzeżenie, nie blokując faktycznego wykonania żądania. W ten sposób atakujący kontrolujący treść przetwarzanego schematu może wymusić na serwerze wykonującym generator wysyłanie żądań do dowolnych, w tym wewnętrznych, punktów końcowych.
Atakujący może wykorzystać podatność do uzyskania dostępu do wewnętrznych zasobów sieciowych (np. usług chmurowych, metadanych instancji, wewnętrznych API), a tym samym do ujawnienia poufnych informacji. Możliwe jest również ograniczone wpływanie na integralność przez interakcję z wewnętrznymi usługami nienarażonymi bezpośrednio na internet.
Należy zaktualizować datamodel-code-generator do wersji 0.61.0 lub nowszej. Patch dostępny jest w repozytorium projektu na GitHub (commit 5fdba4a09f2d7a9996a504975b7ef7d63e3715bb). Do czasu aktualizacji należy unikać przetwarzania schematów JSON/OpenAPI pochodzących z niezaufanych źródeł.
datamodel-code-generator w wersjach od 0.9.1 do 0.60.x (włącznie). Wersja 0.61.0 zawiera poprawkę.
Podatność dotyczy środowisk CI/CD oraz narzędzi deweloperskich przetwarzających zewnętrzne schematy — szczególnie narażone są systemy z dostępem do wewnętrznej infrastruktury sieciowej lub metadanych chmurowych.
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:NKoxudaxi Datamodel Code Generator
APPKoxudaxi0.9.1 – 0.61.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
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