---
id: CVE-2025-53011
aliases:
  - GHSA-7qw8-3vmf-gj32
  - PYSEC-2026-1607
title: >-
  MaterialX Null Pointer Dereference in MaterialXCore Shader Generation due to
  Unchecked implGraphOutput
summary: >-
  MaterialX Null Pointer Dereference in MaterialXCore Shader Generation due to
  Unchecked implGraphOutput
severity: low
vendor: materialx
product: materialx
ecosystem: pip
affected:
  - 'materialx >= 1.39.2, < 1.39.3'
patched:
  - materialx 1.39.3
published: '2025-07-31'
updated: '2026-07-07'
source: OSV
sourceUrl: 'https://osv.dev/vulnerability/GHSA-7qw8-3vmf-gj32'
references:
  - url: >-
      https://github.com/AcademySoftwareFoundation/MaterialX/security/advisories/GHSA-7qw8-3vmf-gj32
  - url: 'https://nvd.nist.gov/vuln/detail/CVE-2025-53011'
  - url: >-
      https://github.com/AcademySoftwareFoundation/MaterialX/commit/7ac1c71de5187dc29793292b5a8dc6d784192ecf
  - url: 'https://github.com/AcademySoftwareFoundation/MaterialX'
  - url: >-
      https://github.com/AcademySoftwareFoundation/MaterialX/releases/tag/v1.39.3
  - url: 'https://github.com/ShielderSec/poc/tree/main/CVE-2025-53011'
tags:
  - osv
  - pip
epss: 0.00516
epssPercentile: 0.41349
ingestedAt: '2026-07-08T18:25:47.194Z'
---

## Overview

### Summary

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:

```cpp
   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 packages

- `materialx >= 1.39.2, < 1.39.3`

## Remediation

Upgrade to a patched release:

- `materialx 1.39.3`
