Skip to content
Heist/ feed
Back to feed
High

Atom-table exhaustion denial-of-service via JSON parse_document in MDEx

Type: advisorySources: OSV

Allocation of Resources Without Limits or Throttling vulnerability in leandrocp MDEx allows Excessive Allocation. MDEx.parse_document/2 accepts a {:json, json} source. In lib/mdex.ex, the private json_to_node/1 function passes the attacker-controlled node_type value to Module.concat/1, which calls String.to_atom/1 and interns a brand-new atom for every distinct value. Atoms are never garbage collected on the BEAM, so a crafted JSON document carrying a unique node_type at each (deeply nested) node mints one permanent atom per node. A single document can intern hundreds of thousands of atoms, and a large enough document exhausts the default atom table (around 1,048,576 atoms) and aborts the entire Erlang VM, taking down every process on the node. Any application that passes untrusted input to the {:json, ...} source of MDEx.parse_document is exposed to an unauthenticated denial-of-service. This issue affects mdex from 0.4.3 before 0.13.2.

Products
Not specified
Affected versions
Not specified
Fixed versions
Not specified
CVEs
CVE-2026-53426
Confirmed fixed CVEs
Not specified
Updated in this feed
2 Nov 2026, 16:42 UTC · Revision 1

Source evidence

Atom-table exhaustion denial-of-service via JSON parse_document in MDEx

core-osv · Original source

Published 29 Jun 2026, 19:11 UTC

Allocation of Resources Without Limits or Throttling vulnerability in leandrocp MDEx allows Excessive Allocation. MDEx.parse_document/2 accepts a {:json, json} source. In lib/mdex.ex, the private json_to_node/1 function passes the attacker-controlled node_type value to Module.concat/1, which calls String.to_atom/1 and interns a brand-new atom for every distinct value. Atoms are never garbage collected on the BEAM, so a crafted JSON document carrying a unique node_type at each (deeply nested) node mints one permanent atom per node. A single document can intern hundreds of thousands of atoms, and a large enough document exhausts the default atom table (around 1,048,576 atoms) and aborts the entire Erlang VM, taking down every process on the node. Any application that passes untrusted input to the {:json, ...} source of MDEx.parse_document is exposed to an unauthenticated denial-of-service. This issue affects mdex from 0.4.3 before 0.13.2.

osv:CVE-2026-53426
Complete source record
{
  "id": "feeb340f57a15053ace8976e6fd5c6c256f3a58b6e66884e7fb018497bb941a4",
  "url": "https://osv.dev/vulnerability/CVE-2026-53426",
  "method": "structured",
  "payload": {
    "kind": "advisory",
    "title": "Atom-table exhaustion denial-of-service via JSON parse_document in MDEx",
    "summary": "Allocation of Resources Without Limits or Throttling vulnerability in leandrocp MDEx allows Excessive Allocation. MDEx.parse_document/2 accepts a {:json, json} source. In lib/mdex.ex, the private json_to_node/1 function passes the attacker-controlled node_type value to Module.concat/1, which calls String.to_atom/1 and interns a brand-new atom for every distinct value. Atoms are never garbage collected on the BEAM, so a crafted JSON document carrying a unique node_type at each (deeply nested) node mints one permanent atom per node. A single document can intern hundreds of thousands of atoms, and a large enough document exhausts the default atom table (around 1,048,576 atoms) and aborts the entire Erlang VM, taking down every process on the node. Any application that passes untrusted input to the {:json, ...} source of MDEx.parse_document is exposed to an unauthenticated denial-of-service. This issue affects mdex from 0.4.3 before 0.13.2.",
    "evidence": "osv:CVE-2026-53426",
    "products": [],
    "severity": "high",
    "structured": {
      "id": "CVE-2026-53426",
      "aliases": [
        "CVE-2026-53426",
        "EEF-CVE-2026-53426",
        "GHSA-923r-7vf4-5vw8"
      ],
      "metrics": [
        {
          "type": "CVSS_V4",
          "score": "CVSS:4.0/AV:L/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:H"
        }
      ],
      "affected": [
        {
          "ranges": [
            {
              "repo": "https://github.com/leandrocp/mdex",
              "type": "GIT",
              "events": [
                {
                  "introduced": "cbb59a3f792dbc343873adec3466f49c853dc309"
                },
                {
                  "fixed": "00fddf444220a1f1cc0af0a1cab6738804878387"
                },
                {
                  "introduced": "4781d9a115108092a97b2099e5578b0f1499f526"
                },
                {
                  "fixed": "c05684d9e78fc879d71ad39f2f5827b124cb5881"
                }
              ],
              "database_specific": {
                "extracted_events": [
                  {
                    "range": [
                      {
                        "introduced": "cbb59a3f792dbc343873adec3466f49c853dc309"
                      },
                      {
                        "fixed": "00fddf444220a1f1cc0af0a1cab6738804878387"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "introduced": "0.4.3"
                      },
                      {
                        "fixed": "0.13.2"
                      }
                    ],
                    "source": "AFFECTED_FIELD",
                    "strategy": "StandardRange"
                  },
                  {
                    "range": [
                      {
                        "fixed": "00fddf444220a1f1cc0af0a1cab6738804878387"
                      }
                    ],
                    "source": "REFERENCES_COMMIT"
                  }
                ]
              }
            }
          ],
          "versions": [
            "v0.13.1",
            "v0.13.0",
            "v0.12.5",
            "v0.12.4",
            "v0.12.3",
            "v0.12.2",
            "v0.12.1",
            "v0.12.0",
            "v0.11.7",
            "v0.11.6",
            "v0.11.5",
            "v0.11.4",
            "v0.11.3",
            "v0.11.2",
            "v0.11.1",
            "v0.11.0",
            "v0.10.0",
            "v0.9.4",
            "v0.9.3",
            "v0.9.2",
            "v0.9.1",
            "v0.9.0",
            "v0.8.6",
            "v0.8.5",
            "v0.8.4",
            "v0.8.3",
            "v0.8.2",
            "v0.8.1",
            "v0.8.0",
            "v0.7.5",
            "v0.7.4",
            "v0.7.3",
            "v0.7.2",
            "v0.7.1",
            "v0.7.0",
            "v0.6.2",
            "v0.6.1",
            "v0.6.0",
            "v0.5.0",
            "v0.4.3"
          ],
          "database_specific": {
            "source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-53426.json"
          }
        }
      ],
      "modified": "2026-10-28T02:30:20.907292253Z",
      "provider": "osv",
      "references": [
        "https://cna.erlef.org/cves/CVE-2026-53426.html",
        "https://github.com",
        "https://osv.dev/vulnerability/EEF-CVE-2026-53426",
        "https://repo.hex.pm",
        "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/53xxx/CVE-2026-53426.json",
        "https://github.com/leandrocp/mdex/security/advisories/GHSA-923r-7vf4-5vw8",
        "https://nvd.nist.gov/vuln/detail/CVE-2026-53426",
        "https://github.com/leandrocp/mdex/commit/00fddf444220a1f1cc0af0a1cab6738804878387",
        "https://github.com/leandrocp/mdex"
      ],
      "provider_metadata": {
        "cwe_ids": [
          "CWE-770"
        ],
        "cna_assigner": "EEF",
        "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/53xxx/CVE-2026-53426.json"
      }
    },
    "related_cves": [
      {
        "value": "CVE-2026-53426",
        "evidence": "/id"
      }
    ],
    "security_relevant": true,
    "severity_evidence": "/severity/0/score"
  },
  "source_id": "core-osv",
  "document_id": 487302,
  "published_at": "2026-06-29T19:11:32.605+00:00"
}