CVE-2026-107377
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- Low
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- None
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.5
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
- Record
CVE-2026-107377- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-22, CWE-73
- Updated
- 2026-11-02
EUVDEUVD-2026-95134
7.5
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
- Record
EUVD-2026-95134- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-77xj-x4rm-935c
7.5
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
Summary
When processing an attacker-controlled Protobuf schema, vulnerable versions of
datamodel-code-generator could write a generated weak-import stub outside the
intended __weak_imports__ temporary directory. Absolute import paths and relative
paths containing .. could escape this directory.
An attacker could create directories and new files at locations writable by the process. Relative path traversal could also overwrite existing writable files because the existence check and the stub write used different base directories. An existing absolute target was skipped by the existence check.
Written content was limited to a generated Protobuf syntax declaration,
syntax = "proto2"; or syntax = "proto3";, followed by a newline. This issue did
not provide fully attacker-controlled file contents, and direct arbitrary code
execution has not been demonstrated.
These filesystem side effects occurred before protoc ran. A subsequent
compilation error did not undo them. A user or CI job must process the
attacker-controlled schema for the issue to be triggered, whether the schema is
supplied as a local file or fetched via --url.
The fix has been merged into the parent repository's main branch in
5e94b8f. A patched package release is not yet available.
The technical details and PoC below describe the vulnerable implementation before
that fix.
Affected component
- Repository:
datamodel-code-generator/datamodel-code-generator(formerlykoxudaxi/datamodel-code-generator). - Analyzed at: released 0.80.0 (
pip install datamodel-code-generator==0.80.0) andmain@ commit834731d56c0a90c182a0919f316069cf5ff0659a(2026-09-13). Both contained the identical vulnerable sink. - Sink / entry point (
src/datamodel_code_generator/parser/protobuf.py, line numbers from 0.80.0):- Source:
WEAK_IMPORT_PATTERN(protobuf.py:37) — attacker-controlled capture group. - Sink:
_write_missing_weak_imports(protobuf.py:391-393) —weak_import_dir / import_path+mkdir(parents=True)+write_text. - Timing: called from
_ProtoInputPreparer.__enter__(protobuf.py:333), beforeprotoc.main(...)runs inside thewithbody.
- Source:
- Preconditions: victim runs the tool (CLI or Python API) with
--input-file-type protobufon an attacker-controlled.proto, supplied as a local file (--input) or a remote URL (--url). Requires thegrpcio-toolspackage (Protobuf support). The attacker does not need privileges on the affected system; filesystem effects are limited to locations writable by the code-generation process.
Severity
Proposed: High. CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5.
- Scored to match the project's own rating of the sibling path-traversal advisories CVE-2026-55389 / CVE-2026-55390, both
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N= 7.5. This finding is the same attack surface (unvalidated path from a processed schema) with the impact moved from confidentiality (read) to integrity (write), henceC:N/I:H. AV:N: the malicious schema can be fetched over the network via--url, consistent with how the siblings were scored.I:H: attacker fully controls the write path and can create arbitrary directory trees and overwrite existing files; only the file content is constrained (a fixedsyntax = "proto{2,3}";line).A:Nchosen conservatively; overwriting build-critical files (lock files,__init__.py, entry points) can cause availability loss, which would argueA:L.- Honest alternative: if the reviewer treats "the victim must run the tool on the file" as user interaction (
UI:R), the score is 6.5 (Moderate). The project usedUI:Nfor the identical read-path siblings, soUI:Nis used here for consistency.
Details
Source pattern — the imported path is captured with no character restriction:
# protobuf.py:37…
- Record
GHSA-77xj-x4rm-935c- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-22, CWE-73
- Updated
- 2026-11-02
NVD
7.5
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
- Record
CVE-2026-107377- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-22, CWE-73
- Updated
- 2026-11-02
OSV
7.5
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
- Record
CVE-2026-107377- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-22, CWE-73
- Updated
- 2026-11-02
OSVGHSA-77xj-x4rm-935c
7.5
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
Summary
When processing an attacker-controlled Protobuf schema, vulnerable versions of
datamodel-code-generator could write a generated weak-import stub outside the
intended __weak_imports__ temporary directory. Absolute import paths and relative
paths containing .. could escape this directory.
An attacker could create directories and new files at locations writable by the process. Relative path traversal could also overwrite existing writable files because the existence check and the stub write used different base directories. An existing absolute target was skipped by the existence check.
Written content was limited to a generated Protobuf syntax declaration,
syntax = "proto2"; or syntax = "proto3";, followed by a newline. This issue did
not provide fully attacker-controlled file contents, and direct arbitrary code
execution has not been demonstrated.
These filesystem side effects occurred before protoc ran. A subsequent
compilation error did not undo them. A user or CI job must process the
attacker-controlled schema for the issue to be triggered, whether the schema is
supplied as a local file or fetched via --url.
The fix has been merged into the parent repository's main branch in
5e94b8f. A patched package release is not yet available.
The technical details and PoC below describe the vulnerable implementation before
that fix.
Affected component
- Repository:
datamodel-code-generator/datamodel-code-generator(formerlykoxudaxi/datamodel-code-generator). - Analyzed at: released 0.80.0 (
pip install datamodel-code-generator==0.80.0) andmain@ commit834731d56c0a90c182a0919f316069cf5ff0659a(2026-09-13). Both contained the identical vulnerable sink. - Sink / entry point (
src/datamodel_code_generator/parser/protobuf.py, line numbers from 0.80.0):- Source:
WEAK_IMPORT_PATTERN(protobuf.py:37) — attacker-controlled capture group. - Sink:
_write_missing_weak_imports(protobuf.py:391-393) —weak_import_dir / import_path+mkdir(parents=True)+write_text. - Timing: called from
_ProtoInputPreparer.__enter__(protobuf.py:333), beforeprotoc.main(...)runs inside thewithbody.
- Source:
- Preconditions: victim runs the tool (CLI or Python API) with
--input-file-type protobufon an attacker-controlled.proto, supplied as a local file (--input) or a remote URL (--url). Requires thegrpcio-toolspackage (Protobuf support). The attacker does not need privileges on the affected system; filesystem effects are limited to locations writable by the code-generation process.
Severity
Proposed: High. CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5.
- Scored to match the project's own rating of the sibling path-traversal advisories CVE-2026-55389 / CVE-2026-55390, both
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N= 7.5. This finding is the same attack surface (unvalidated path from a processed schema) with the impact moved from confidentiality (read) to integrity (write), henceC:N/I:H. AV:N: the malicious schema can be fetched over the network via--url, consistent with how the siblings were scored.I:H: attacker fully controls the write path and can create arbitrary directory trees and overwrite existing files; only the file content is constrained (a fixedsyntax = "proto{2,3}";line).A:Nchosen conservatively; overwriting build-critical files (lock files,__init__.py, entry points) can cause availability loss, which would argueA:L.- Honest alternative: if the reviewer treats "the victim must run the tool on the file" as user interaction (
UI:R), the score is 6.5 (Moderate). The project usedUI:Nfor the identical read-path siblings, soUI:Nis used here for consistency.
Details
Source pattern — the imported path is captured with no character restriction:
# protobuf.py:37…
- Record
GHSA-77xj-x4rm-935c- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Weakness
- CWE-22, CWE-73
- Updated
- 2026-11-02
OSVPYSEC-2026-4205
7.5
datamodel-code-generator: Protobuf weak-import path traversal allows files to be written outside the temporary directory
Summary
When processing an attacker-controlled Protobuf schema, vulnerable versions of
datamodel-code-generator could write a generated weak-import stub outside the
intended __weak_imports__ temporary directory. Absolute import paths and relative
paths containing .. could escape this directory.
An attacker could create directories and new files at locations writable by the process. Relative path traversal could also overwrite existing writable files because the existence check and the stub write used different base directories. An existing absolute target was skipped by the existence check.
Written content was limited to a generated Protobuf syntax declaration,
syntax = "proto2"; or syntax = "proto3";, followed by a newline. This issue did
not provide fully attacker-controlled file contents, and direct arbitrary code
execution has not been demonstrated.
These filesystem side effects occurred before protoc ran. A subsequent
compilation error did not undo them. A user or CI job must process the
attacker-controlled schema for the issue to be triggered, whether the schema is
supplied as a local file or fetched via --url.
The fix has been merged into the parent repository's main branch in
5e94b8f. A patched package release is not yet available.
The technical details and PoC below describe the vulnerable implementation before
that fix.
Affected component
- Repository:
datamodel-code-generator/datamodel-code-generator(formerlykoxudaxi/datamodel-code-generator). - Analyzed at: released 0.80.0 (
pip install datamodel-code-generator==0.80.0) andmain@ commit834731d56c0a90c182a0919f316069cf5ff0659a(2026-09-13). Both contained the identical vulnerable sink. - Sink / entry point (
src/datamodel_code_generator/parser/protobuf.py, line numbers from 0.80.0):- Source:
WEAK_IMPORT_PATTERN(protobuf.py:37) — attacker-controlled capture group. - Sink:
_write_missing_weak_imports(protobuf.py:391-393) —weak_import_dir / import_path+mkdir(parents=True)+write_text. - Timing: called from
_ProtoInputPreparer.__enter__(protobuf.py:333), beforeprotoc.main(...)runs inside thewithbody.
- Source:
- Preconditions: victim runs the tool (CLI or Python API) with
--input-file-type protobufon an attacker-controlled.proto, supplied as a local file (--input) or a remote URL (--url). Requires thegrpcio-toolspackage (Protobuf support). The attacker does not need privileges on the affected system; filesystem effects are limited to locations writable by the code-generation process.
Severity
Proposed: High. CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N = 7.5.
- Scored to match the project's own rating of the sibling path-traversal advisories CVE-2026-55389 / CVE-2026-55390, both
AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N= 7.5. This finding is the same attack surface (unvalidated path from a processed schema) with the impact moved from confidentiality (read) to integrity (write), henceC:N/I:H. AV:N: the malicious schema can be fetched over the network via--url, consistent with how the siblings were scored.I:H: attacker fully controls the write path and can create arbitrary directory trees and overwrite existing files; only the file content is constrained (a fixedsyntax = "proto{2,3}";line).A:Nchosen conservatively; overwriting build-critical files (lock files,__init__.py, entry points) can cause availability loss, which would argueA:L.- Honest alternative: if the reviewer treats "the victim must run the tool on the file" as user interaction (
UI:R), the score is 6.5 (Moderate). The project usedUI:Nfor the identical read-path siblings, soUI:Nis used here for consistency.
Details
Source pattern — the imported path is captured with no character restriction:
# protobuf.py:37…
- Record
PYSEC-2026-4205- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
OSVUBUNTU-CVE-2026-107377
7.5
datamodel-code-generator generates Python data models from schema definitions. From 0.59.0 until 0.81.0, an attacker-controlled Protobuf schema can supply absolute or parent-directory paths captured by WEAK_IMPORT_PATTERN and consumed by _write_missing_weak_imports in src/datamodel_code_generator/parser/protobuf.py. Exploitation requires a victim or automated job to process the attacker-controlled schema with Protobuf input support, which requires the grpcio-tools package. The paths escape the weak_imports temporary directory before protoc runs, allowing creation of directory trees and new files or overwrite of existing writable files with a generated Protobuf syntax declaration. The effect persists when later Protobuf compilation fails. The written content is limited to a proto2 or proto3 syntax declaration, and direct arbitrary code execution has not been demonstrated. This issue is fixed in version 0.81.0.
- Record
UBUNTU-CVE-2026-107377- CVSS 3.1
- 7.5 High
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N - Updated
- 2026-11-02
OSVopenSUSE-SU-2026:12096-1 No score
python313-datamodel-code-generator-0.83.0-1.1 on GA media
These are all security issues fixed in the python313-datamodel-code-generator-0.83.0-1.1 package on the GA media of openSUSE Tumbleweed.
- Record
openSUSE-SU-2026:12096-1- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
datamodel-code-generatorPyPI |
0.59.0 to 0.80.0 | 0.81.0 |
datamodel-code-generatorPyPI |
0.59.0 up to 0.81.0, plus listed versions 0.59.10.60.00.60.10.60.20.61.0 Show 32 moreShow less0.62.00.63.00.64.00.64.10.65.00.65.10.66.00.66.10.66.20.66.30.67.00.68.00.68.10.69.00.70.00.71.00.72.00.72.10.72.20.72.30.72.40.73.00.74.00.75.00.75.10.76.00.76.10.76.20.77.00.78.00.79.00.80.0 |
0.81.0 |
python-datamodel-code-generatorUbuntu:26.10 |
All versions, plus listed versions 0.45.0-10.57.0-10.68.1-20.71.0-1 |
None known |
python-datamodel-code-generatorUbuntu:26.04:LTS |
All versions, plus listed versions 0.26.4-30.45.0-1 |
None known |
python-datamodel-code-generatoropenSUSE:Tumbleweed |
before 0.83.0-1.1 | 0.83.0-1.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-107377 is a high vulnerability (CVSS 7.5) in Datamodel-code-generator, published October 8, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.53%, the 45th percentile. Fixed in datamodel-code-generator 0.81.0.
References
github.com/datamodel-code-generator/datamodel-code-generator/security/advisories/GHSA-77xj-x4rm-935c
github.com/datamodel-code-generator/datamodel-code-generator/commit/5e94b8f4203198798ec66b8e48217f70af69a0dc
github.com/datamodel-code-generator/datamodel-code-generator/releases/tag/0.81.0
github.com/advisories/GHSA-77xj-x4rm-935c
github.com/CVEProject/cvelistV5/tree/main/cves/2026/107xxx/CVE-2026-107377.json
nvd.nist.gov/vuln/detail/CVE-2026-107377
Left out here: the rest of 3 source descriptions. The JSON record has them.