GHSA-7QW8-3VMF-GJ32
Vulnerability from github – Published: 2025-07-31 18:31 – Updated: 2025-08-01 18:36Summary
When parsing shader nodes in a MTLX file, the MaterialXCore code accesses a potentially null pointer, which can lead to crashes with maliciously crafted files.
Details
In source/MaterialXCore/Material.cpp, the following code extracts the output nodes for a given implementation graph:
InterfaceElementPtr impl = materialNodeDef->getImplementation();
if (impl && impl->isA<NodeGraph>())
{
NodeGraphPtr implGraph = impl->asA<NodeGraph>();
for (OutputPtr defOutput : materialNodeDef->getOutputs())
{
if (defOutput->getType() == MATERIAL_TYPE_STRING)
{
OutputPtr implGraphOutput = implGraph->getOutput(defOutput->getName());
for (GraphIterator it = implGraphOutput->traverseGraph().begin(); it != GraphIterator::end(); ++it)
{
ElementPtr upstreamElem = it.getUpstreamElement();
if (!upstreamElem)
{
it.setPruneSubgraph(true);
continue;
}
NodePtr upstreamNode = upstreamElem->asA<Node>();
if (upstreamNode && upstream
However, when defining the implGraphOutput variable by getting the output node, the code doesn't check whether its value is null before accessing its iterator traverseGraph(). This leads to a potential null pointer dereference.
PoC
Please download nullptr_implgraph.mtlx from the following link:
https://github.com/ShielderSec/poc/tree/main/CVE-2025-53011
build/bin/MaterialXView --material nullptr_implgraph.mtlx
Impact
An attacker could intentionally crash a target program that uses MaterialX by sending a malicious MTLX file.
{
"affected": [
{
"package": {
"ecosystem": "PyPI",
"name": "MaterialX"
},
"ranges": [
{
"events": [
{
"introduced": "1.39.2"
},
{
"fixed": "1.39.3"
}
],
"type": "ECOSYSTEM"
}
],
"versions": [
"1.39.2"
]
}
],
"aliases": [
"CVE-2025-53011"
],
"database_specific": {
"cwe_ids": [
"CWE-476"
],
"github_reviewed": true,
"github_reviewed_at": "2025-07-31T18:31:23Z",
"nvd_published_at": "2025-08-01T18:15:54Z",
"severity": "LOW"
},
"details": "### Summary\n\nWhen parsing shader nodes in a MTLX file, the MaterialXCore code accesses a potentially null pointer, which can lead to crashes with maliciously crafted files.\n\n### Details\n\nIn `source/MaterialXCore/Material.cpp`, the following code extracts the output nodes for a given implementation graph:\n\n```cpp\n InterfaceElementPtr impl = materialNodeDef-\u003egetImplementation();\n if (impl \u0026\u0026 impl-\u003eisA\u003cNodeGraph\u003e())\n {\n NodeGraphPtr implGraph = impl-\u003easA\u003cNodeGraph\u003e();\n for (OutputPtr defOutput : materialNodeDef-\u003egetOutputs())\n {\n if (defOutput-\u003egetType() == MATERIAL_TYPE_STRING)\n {\n OutputPtr implGraphOutput = implGraph-\u003egetOutput(defOutput-\u003egetName());\n for (GraphIterator it = implGraphOutput-\u003etraverseGraph().begin(); it != GraphIterator::end(); ++it)\n {\n ElementPtr upstreamElem = it.getUpstreamElement();\n if (!upstreamElem)\n {\n it.setPruneSubgraph(true);\n continue;\n }\n NodePtr upstreamNode = upstreamElem-\u003easA\u003cNode\u003e();\n if (upstreamNode \u0026\u0026 upstream\n```\n\nHowever, when defining the `implGraphOutput` variable by getting the output node, the code doesn\u0027t check whether its value is null before accessing its iterator `traverseGraph()`. This leads to a potential null pointer dereference.\n\n### PoC\n\nPlease download `nullptr_implgraph.mtlx` from the following link:\n\nhttps://github.com/ShielderSec/poc/tree/main/CVE-2025-53011\n\n`build/bin/MaterialXView --material nullptr_implgraph.mtlx`\n\n### Impact\n\nAn attacker could intentionally crash a target program that uses MaterialX by sending a malicious MTLX file.",
"id": "GHSA-7qw8-3vmf-gj32",
"modified": "2025-08-01T18:36:10Z",
"published": "2025-07-31T18:31:23Z",
"references": [
{
"type": "WEB",
"url": "https://github.com/AcademySoftwareFoundation/MaterialX/security/advisories/GHSA-7qw8-3vmf-gj32"
},
{
"type": "ADVISORY",
"url": "https://nvd.nist.gov/vuln/detail/CVE-2025-53011"
},
{
"type": "WEB",
"url": "https://github.com/AcademySoftwareFoundation/MaterialX/commit/7ac1c71de5187dc29793292b5a8dc6d784192ecf"
},
{
"type": "PACKAGE",
"url": "https://github.com/AcademySoftwareFoundation/MaterialX"
},
{
"type": "WEB",
"url": "https://github.com/AcademySoftwareFoundation/MaterialX/releases/tag/v1.39.3"
},
{
"type": "WEB",
"url": "https://github.com/ShielderSec/poc/tree/main/CVE-2025-53011"
}
],
"schema_version": "1.4.0",
"severity": [
{
"score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N/E:P",
"type": "CVSS_V4"
}
],
"summary": "MaterialX Null Pointer Dereference in MaterialXCore Shader Generation due to Unchecked implGraphOutput"
}
Sightings
| Author | Source | Type | Date |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.