CVE-2026-13480

Source
https://cve.org/CVERecord?id=CVE-2026-13480
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-13480.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-13480
Aliases
  • GHSA-845m-2m84-g5h2
Published
2026-08-26T14:03:48.784Z
Modified
2026-08-28T14:33:01.305053Z
Severity
  • 3.1 (Low) CVSS_V3 - CVSS:3.1/AV:A/AC:H/PR:H/UI:N/S:U/C:L/I:N/A:L CVSS Calculator
Summary
Out-of-bounds read in LoRaWAN fragmented data block transport (FUOTA) downlink handler
Details

The LoRaWAN TS004 Fragmented Data Block Transport handler fragtransportpackagecallback() in subsys/lorawan/services/fragtransport.c parses downlink command bytes without validating that enough payload bytes remain before each access. The loop's only bound is rxpos < len; after consuming the one-byte command id the handler cast rxbuf + rxpos to a 10-byte struct fragtransportsetupreq, and for a DATAFRAGMENT command passed &rxbuf[rxpos] to the fragment decoder, which reads exactly ctx.fragsize bytes — with no remaining-length check in either case.

The fragment size is attacker-chosen in a preceding FRAGSESSIONSETUP command (ctx.fragsize = req->fragsize, capped at CONFIGLORAWANFRAGTRANSPORTMAXFRAGSIZE, default 232). rxbuf aliases the 255-byte static MacCtx.RxPayload buffer in the loramac-node MAC layer, while len is the actual decrypted payload length. By padding a downlink with mismatched-index DATAFRAGMENT filler commands (each advancing rxpos by three bytes without producing an answer) and appending one matching-index fragment near the end of the payload, an attacker can make the decoder read up to roughly fragsize bytes past the end of RxPayload, copying adjacent static memory into the decoder buffers and the FUOTA flash image.

The handler runs only on downlinks that have already passed the LoRaWAN frame MIC and FRMPayload decryption, so the defect is reachable only by a party holding the device's session keys (the FUOTA server or an attacker who has compromised those keys). The out-of-bounds bytes are never returned to the sender — the only uplink emitted is a status answer carrying fragment counts — so there is no direct disclosure channel, and on typical flat-memory LoRaWAN MCUs the over-read stays within mapped memory, making a crash unlikely. The impact is therefore a bounded out-of-bounds read with limited confidentiality consequence and no write or control-flow primitive. The fix adds remaining-length guards before each access.

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/13xxx/CVE-2026-13480.json",
    "cwe_ids": [
        "CWE-125",
        "CWE-20"
    ],
    "cna_assigner": "zephyr"
}
References

Affected packages

Git / github.com/zephyrproject-rtos/zephyr

Affected ranges

Type
GIT
Repo
https://github.com/zephyrproject-rtos/zephyr
Events
Database specific
Show details
{
    "source": [
        "AFFECTED_FIELD",
        "REFERENCES"
    ],
    "extracted_events": [
        {
            "introduced": "3.7.0"
        },
        {
            "fixed": "4.4.2"
        }
    ]
}

Affected versions

v3.*
v3.7.0
v4.*
v4.0.0
v4.0.0-rc1
v4.0.0-rc2
v4.0.0-rc3
v4.1.0
v4.1.0-rc1
v4.1.0-rc2
v4.1.0-rc3
v4.2.0
v4.2.0-rc1
v4.2.0-rc2
v4.2.0-rc3
v4.3.0
v4.3.0-rc1
v4.3.0-rc2
v4.3.0-rc3
v4.4.0
v4.4.0-rc1
v4.4.0-rc2
v4.4.0-rc3

Database specific

vanir_signatures
[
    {
        "id": "CVE-2026-13480-6ba40dd0",
        "target": {
            "function": "frag_transport_package_callback",
            "file": "subsys/lorawan/services/frag_transport.c"
        },
        "deprecated": false,
        "digest": {
            "function_hash": "316211912292132871131680363740195627971",
            "length": 5488.0
        },
        "signature_version": "v1",
        "source": "https://github.com/zephyrproject-rtos/zephyr/commit/237309ea7c46ce85cedebf33dfea639aa2f5e2ca",
        "signature_type": "Function"
    },
    {
        "id": "CVE-2026-13480-a456c319",
        "target": {
            "file": "subsys/lorawan/services/frag_transport.c"
        },
        "deprecated": false,
        "digest": {
            "threshold": 0.9,
            "line_hashes": [
                "197346903796518390038195045789390185729",
                "305436191172181517910880782526496627869",
                "262517246516987653867743204915962266480",
                "161458751357138752442417713700722091578",
                "31210120758469066565829088479547836460",
                "35811794333326221786741781094583853671",
                "296472604823103694447151471903956339654",
                "119439722266702207304434499077739694727",
                "32374700486773657660120949720004856832",
                "181017200071947815983925304541590839893",
                "311439266199497870871025372808093216087"
            ]
        },
        "signature_version": "v1",
        "source": "https://github.com/zephyrproject-rtos/zephyr/commit/237309ea7c46ce85cedebf33dfea639aa2f5e2ca",
        "signature_type": "Line"
    }
]
source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-13480.json"
vanir_signatures_modified
"2026-08-28T14:33:01Z"