Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessOpen pull request to devicetype-library
-
DeliveryEdit NETBOX_DT_LIBRARY_URL to attacker host
-
ExploitValidation harness triggers clone_from/fetch
-
ExecutionBlind Git request or substituted known-*.json loaded
-
ImpactUniqueness validation bypassed
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A02:2025 - Security Misconfiguration
ASVS 5.0
V13 - Configuration Configuration hardening
|
| Exploitation Conditions | Requires the attacker to submit a pull request to the netbox-community/devicetype-library repository whose validation test harness (pytest over tests/definitions_test.py) then runs against the PR-controlled NETBOX_DT_LIBRARY_URL constant in tests/test_configuration.py, or against attacker-supplied tests/known-*.json caches. Exploitation is bounded to affected revisions before fix commit 8980c690 and is limited by: the request being blind (no arbitrary metadata-service headers, no readable response body), no remote Git hook execution, and - in practice - GitHub Actions typically requiring maintainer approval before fork pull_request workflows execute. Impact is confined to CI integrity (bypassing slug/module/rack uniqueness validation) and outbound blind probing from the runner; there is no impact on any deployed NetBox instance. |
| Impact | This is a genuinely low-real-world-risk issue despite a network-vector CVSS. The vendor CVSS 3.1 base of 5.3 (AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N) reflects only an integrity-limited impact (I:L, C:N, A:N) - no code execution, no data disclosure, no availability loss. The 'network' vector is technically true only because the exploit primitive is an outbound Git smart-HTTP request from a CI runner, not because a production NetBox instance is remotely reachable; the affected artifact is a repository CI/test harness (devicetype-library), NOT a deployed NetBox service. No EPSS score, KEV listing, POC, or SSVC data was provided; per the input this is 'no public exploit identified at time of analysis.' The description itself narrows the primitive: the SSRF is blind (cannot set metadata-service headers, cannot return response bodies) and does not execute remote Git hooks, so it cannot be escalated to RCE or cloud-credential theft the way a full SSRF might. Real value is limited to (a) blind outbound probing from the runner and (b) substituting attacker-controlled known-*.json validation caches to bypass slug/module/rack uniqueness checks. Net: a legitimate CI supply-chain hardening fix, not an urgent production-facing priority. Note the CVSS AC:L is arguably optimistic - GitHub Actions fork pull_request workflows typically require maintainer approval before running, a real gating factor not reflected in the base vector. |
| Exploit ScenarioDerived | An unauthenticated contributor opens a pull request against netbox-community/devicetype-library that edits the tracked NETBOX_DT_LIBRARY_URL constant in tests/test_configuration.py to point at an attacker-controlled host (or supplies crafted tests/known-*.json caches). When the validation harness runs under pytest, Repo.clone_from and create_remote('upstream').fetch() issue blind Git smart-HTTP requests to that host and/or load the substituted validation data, allowing the PR to slip past slug/module/rack uniqueness validation. No public exploit is identified; the request is blind (no response body, no arbitrary headers) and executes no remote Git hooks. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 17, 2026
Pull-request authors against the community NetBox Device Type Library repository can repoint that repository's own pytest validation harness at an attacker-chosen Git host or substitute forged tests/known-*.json validation caches, allowing CI runs to bypass slug, module, and rack uniqueness checks that the library is supposed to enforce. The exposed constant NETBOX_DT_LIBRARY_URL in tests/test_configuration.py is consumed unvalidated by tests/definitions_test.py during pytest collection through GitPython's Repo.clone_from and create_remote("upstream").fetch(), yielding blind outbound Git smart-HTTP requests to an attacker-selected host with no ability to set arbitrary metadata-service headers or read response bodies, and no remote Git hook execution. The CVSS vector is AV:N/PR:N (unauthenticated from a network perspective), but the assessed impact is confined to CI integrity on repository revisions before fix commit 8980c690097e92f5028c7e6df402b327d827ecd5 - no deployed NetBox instance is affected, no public exploit identified at time of analysis, and GitHub Actions' usual maintainer-approval gate for fork pull_request workflows further limits practical abuse, making this a genuinely low real-world risk issue.
RemediationAI
Adopt commit 8980c690097e92f5028c7e6df402b327d827ecd5 (or any later commit) of netbox-community/devicetype-library, which replaces the free-form NETBOX_DT_LIBRARY_URL constant with a _resolve_netbox_dt_library_url() helper that normalizes trailing slashes and allowlists only https://github.com/netbox-community/devicetype-library[.git], raising ValueError on anything else; if the project needs a mirror, use the new DTL_NETBOX_DT_LIBRARY_URL environment variable set by CI or maintainers rather than a tracked constant - this is the patch status of "Upstream fix available (PR/commit); released patched version not independently confirmed," so pin the commit SHA rather than relying on a tag. Until the fix is deployed, the highest-value compensating control is to ensure GitHub Actions never runs untrusted PR-controlled code without maintainer approval (keep the default "Require approval for first-time contributors" and, ideally, require approval for all fork pull_request runs) and to run the validation harness against the base branch's tests/ directory instead of the PR's, accepting the trade-off that base-branch tests may not reflect legitimate PR test changes and contributors may need a maintainer-run re-validation step. Additional controls with smaller side effects: pin or checksum the tests/known-*.json validation caches and reject PR modifications to them, restrict the workflow's GITHUB_TOKEN permissions and network egress from runners so blind Git fetches to arbitrary hosts fail (side effect: legitimate upstream clones may need an allowlisted GitHub egress rule), and avoid pull_request_target patterns that check out PR head code with elevated secrets. Guidance and fix details are in the advisory at https://github.com/netbox-community/devicetype-library/security/advisories/GHSA-8cfp-3c4q-xr6x, PR https://github.com/netbox-community/devicetype-library/pull/4240, and commit https://github.com/netbox-community/devicetype-library/commit/8980c690097e92f5028c7e6df402b327d827ecd5.
Affected VersionsENISA
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The weakness class is CWE-15 (External Control of System or Configuration Setting): a security-relevant configuration value is read from a source that an untrusted party (a fork PR author) can modify. Here the value is the module-level constant NETBOX_DT_LIBRARY_URL in tests/test_configuration.py, a free-form tracked string in the netbox-community/devicetype-library repository (CPE cpe:2.3:a:netbox-community:devicetype-library:*:*:*:*:*:*:*:*). At pytest collection time, tests/definitions_test.py feeds that constant into GitPython primitives (Repo.clone_from and create_remote("upstream").fetch()), so a PR-changed URL triggers Git smart-HTTP traffic toward whatever host the PR author names; because the request is blind, it cannot set arbitrary request headers (blocking typical IMDS header tricks) and cannot read the response body, and Git remote hooks are not executed server-side. The same PR-controlled code path allows loading attacker-supplied tests/known-*.json caches in place of the real validation data, which is the direct cause of the integrity impact: slug, module, and rack uniqueness validation can be satisfied with fabricated entries. The fix in commit 8980c690097e92f5028c7e6df402b327d827ecd5 replaces the raw constant with a _resolve_netbox_dt_library_url() helper that reads an optional DTL_NETBOX_DT_LIBRARY_URL environment override, strips trailing slashes, and rejects anything other than the exact canonical upstream URLs (with or without the .git suffix) via ValueError - i.e., an explicit allowlist that removes the PR author's ability to influence the clone target.
Know when Devicetype Library gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:N
Anyone can open a PR (PR:N), but fork-PR workflow approval and the blind, hook-free primitive raise complexity (AC:H); impact is limited to CI validation integrity (I:L), with no confidentiality or availability effect.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
1DescriptionCVE.org
NetBox Device Type Library is a collection of community-sourced device type definitions for import into NetBox. In the affected repository revisions, NETBOX_DT_LIBRARY_URL in tests/test_configuration.py is a free-form tracked constant that an unauthenticated pull-request author can change before the validation test harness runs. During pytest collection, tests/definitions_test.py passes the value to Repo.clone_from and create_remote("upstream").fetch(), causing blind Git smart-HTTP requests to an attacker-selected host or loading attacker-controlled tests/known-*.json validation caches. The blind request cannot set arbitrary metadata-service headers or return response bodies, and this path does not execute remote Git hooks, but substituted known data can bypass slug, module, and rack uniqueness validation. This vulnerability is fixed in commit 8980c690097e92f5028c7e6df402b327d827ecd5.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
More in Devicetype Library
View allArbitrary code execution in the CI pipeline of the NetBox devicetype-library repository lets an unauthenticated contribu
Untrusted code execution in the NetBox devicetype-library CI pipeline lets any contributor who can open a pull request r
EUVD-2026-82415
NVD
CVE.org
EPSS
GitHub
Exploit-DB