← Back to CVE Explorer

CVE-2026-48716

Full vulnerability record from the local CVENow database.

Description

nanobot is a personal AI assistant. In versions 0.1.5.post3 and prior, the WhatsApp bridge in bridge/src/whatsapp.ts constructs a filesystem path using the fileName field from an incoming WhatsApp document message without sanitization. The WhatsApp bridge downloads media attachments and writes them to disk using a filename derived from the sender's message via documentMessage.fileName, which is concatenated with a prefix and its raw value is passed directly to path.join(mediaDir, outFilename). Node.js path.join resolves .. components, allowing an attacker to escape the intended media/ directory by sending a document with a crafted fileName such as ../../../.ssh/authorized_keys. Because the attacker also controls the file content (the downloaded buffer), this is a write-anywhere primitive — both path and content are attacker-controlled. A fix for this issue is planned for version 0.1.5.post4.

Severity
HIGH
CVSS score
8.7 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-06-18 20:16:13.850000
Last modified
2026-10-25 23:10:00.167000
View original CVE JSON
{
  "id": "CVE-2026-48716",
  "sourceIdentifier": "[email protected]",
  "published": "2026-06-18T20:16:13.850",
  "lastModified": "2026-10-25T23:10:00.167",
  "vulnStatus": "Deferred",
  "cveTags": [],
  "descriptions": [
    {
      "lang": "en",
      "value": "nanobot is a personal AI assistant. In versions 0.1.5.post3 and prior, the WhatsApp bridge in bridge/src/whatsapp.ts constructs a filesystem path using the fileName field from an incoming WhatsApp document message without sanitization. The WhatsApp bridge downloads media attachments and writes them to disk using a filename derived from the sender's message via documentMessage.fileName, which is concatenated with a prefix and its raw value is passed directly to path.join(mediaDir, outFilename). Node.js path.join resolves .. components, allowing an attacker to escape the intended media/ directory by sending a document with a crafted fileName such as ../../../.ssh/authorized_keys. Because the attacker also controls the file content (the downloaded buffer), this is a write-anywhere primitive — both path and content are attacker-controlled. A fix for this issue is planned for version 0.1.5.post4."
    },
    {
      "lang": "es",
      "value": "nanobot es un asistente personal de IA. En las versiones 0.1.5.post3 y anteriores, el puente de WhatsApp en bridge/src/whatsapp.ts construye una ruta del sistema de archivos utilizando el campo fileName de un mensaje de documento de WhatsApp entrante sin sanitización. El puente de WhatsApp descarga archivos adjuntos multimedia y los escribe en el disco utilizando un nombre de archivo derivado del mensaje del remitente a través de documentMessage.fileName, el cual se concatena con un prefijo y su valor sin procesar se pasa directamente a path.join(mediaDir, outFilename). Node.js path.join resuelve los componentes .., permitiendo a un atacante escapar del directorio media/ previsto enviando un documento con un fileName manipulado como .. / .. / .. / .ssh/authorized_keys. Debido a que el atacante también controla el contenido del archivo (el búfer descargado), esto es una primitiva de escritura en cualquier lugar - tanto la ruta como el contenido están controlados por el atacante. Se planea una solución para este problema para la versión 0.1.5.post4."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "HKUDS",
          "product": "nanobot",
          "versions": [
            {
              "version": "<= 0.1.5.post3",
              "status": "affected"
            }
          ]
        }
      ]
    }
  ],
  "metrics": {
    "cvssMetricV31": [
      {
        "source": "[email protected]",
        "type": "Secondary",
        "cvssData": {
          "version": "3.1",
          "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:N/I:H/A:H",
          "baseScore": 8.7,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "HIGH",
          "privilegesRequired": "NONE",
          "userInteraction": "NONE",
          "scope": "CHANGED",
          "confidentialityImpact": "NONE",
          "integrityImpact": "HIGH",
          "availabilityImpact": "HIGH"
        },
        "exploitabilityScore": 2.2,
        "impactScore": 5.8
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-06-22T15:40:56.174780Z",
          "id": "CVE-2026-48716",
          "options": [
            {
              "exploitation": "poc"
            },
            {
              "automatable": "no"
            },
            {
              "technicalImpact": "total"
            }
          ],
          "role": "CISA Coordinator",
          "version": "2.0.3"
        }
      }
    ]
  },
  "weaknesses": [
    {
      "source": "[email protected]",
      "type": "Secondary",
      "description": [
        {
          "lang": "en",
          "value": "CWE-22"
        }
      ]
    }
  ],
  "references": [
    {
      "url": "https://github.com/HKUDS/nanobot/security/advisories/GHSA-3f63-vcp3-hvqr",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/HKUDS/nanobot/security/advisories/GHSA-3f63-vcp3-hvqr",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}