GHSA-5CXQ-44W6-64MX

Vulnerability from github – Published: 2026-09-29 18:32 – Updated: 2026-09-29 18:32
VLAI
Details

A TFTP server that answers with a short ERROR packet makes the client read up to 64 bytes past the

received datagram.

Each receive path checks only that the datagram is at least four bytes long (nxd_tftp_client.c:1229,

1521, 1984). When the opcode is NX_TFTP_CODE_ERROR the message string is copied with a loop whose

only limits are the destination buffer and a NUL byte:




/* addons/tftp/nxd_tftp_client.c:1769 */



for (i = 0; (i < (sizeof(tftp_client_ptr -> nx_tftp_client_error_string) - 1)) && (*buffer_ptr); i++)



Nothing compares buffer_ptr against nx_packet_append_ptr. An ERROR packet that carries no

terminating NUL, which a server controls completely, walks the loop off the end of the packet until

it happens to meet a zero byte or fills the 64 byte destination.




ERROR: AddressSanitizer: heap-buffer-overflow



READ of size 1 at 0x60d0000000c8 thread T4

    #0 _nxd_tftp_client_file_read  addons/tftp/nxd_tftp_client.c:1769


0x60d0000000c8 is 0 bytes to the right of 136-byte region



The open path has the same loop at :1327 and reports the same way. What is read lands in

nx_tftp_client_error_string, which the application is expected to display or log, so adjacent

packet pool memory ends up in whatever the device does with the error text.

Add (buffer_ptr < packet_ptr -> nx_packet_append_ptr) to the loop condition in all three paths.

Show details on source website

{
  "affected": [],
  "aliases": [
    "CVE-2026-102721"
  ],
  "database_specific": {
    "cwe_ids": [
      "CWE-125"
    ],
    "github_reviewed": false,
    "github_reviewed_at": null,
    "nvd_published_at": "2026-09-29T18:17:11Z",
    "severity": "MODERATE"
  },
  "details": "A TFTP server that answers with a short ERROR packet makes the client read up to 64 bytes past the\n\n\n\nreceived datagram.\n\n\n\nEach receive path checks only that the datagram is at least four bytes long (nxd_tftp_client.c:1229,\n\n\n\n1521, 1984). When the opcode is NX_TFTP_CODE_ERROR the message string is copied with a loop whose\n\n\n\nonly limits are the destination buffer and a NUL byte:\n\n\n\n```c\n\n\n\n/* addons/tftp/nxd_tftp_client.c:1769 */\n\n\n\nfor (i = 0; (i \u003c (sizeof(tftp_client_ptr -\u003e nx_tftp_client_error_string) - 1)) \u0026\u0026 (*buffer_ptr); i++)\n\n\n\n```\n\n\n\nNothing compares `buffer_ptr` against `nx_packet_append_ptr`. An ERROR packet that carries no\n\n\n\nterminating NUL, which a server controls completely, walks the loop off the end of the packet until\n\n\n\nit happens to meet a zero byte or fills the 64 byte destination.\n\n\n\n```\n\n\n\nERROR: AddressSanitizer: heap-buffer-overflow\n\n\n\nREAD of size 1 at 0x60d0000000c8 thread T4\n\n    #0 _nxd_tftp_client_file_read  addons/tftp/nxd_tftp_client.c:1769\n\n\n0x60d0000000c8 is 0 bytes to the right of 136-byte region\n\n\n\n```\n\n\n\nThe open path has the same loop at :1327 and reports the same way. What is read lands in\n\n\n\n`nx_tftp_client_error_string`, which the application is expected to display or log, so adjacent\n\n\n\npacket pool memory ends up in whatever the device does with the error text.\n\n\n\nAdd `(buffer_ptr \u003c packet_ptr -\u003e nx_packet_append_ptr)` to the loop condition in all three paths.",
  "id": "GHSA-5cxq-44w6-64mx",
  "modified": "2026-09-29T18:32:01Z",
  "published": "2026-09-29T18:32:01Z",
  "references": [
    {
      "type": "WEB",
      "url": "https://github.com/eclipse-threadx/netxduo/security/advisories/GHSA-wvc9-5m9h-rvxc"
    },
    {
      "type": "ADVISORY",
      "url": "https://nvd.nist.gov/vuln/detail/CVE-2026-102721"
    }
  ],
  "schema_version": "1.4.0",
  "severity": [
    {
      "score": "CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:L/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
      "type": "CVSS_V4"
    }
  ]
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

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.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…