← Back to Feed CACHED · 2026-05-17 09:42:19 · cache_key CVE-2025-29912
CVE-2026-2874 · CWE-119 · Disclosed 2026-02-21

A flaw has been found in Tenda A21 1

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
01 · The Real Story

This is a chainsaw left in a locked shed, not one swinging through your data center

CVE-2026-2874 is a stack-based buffer overflow in the Tenda A21 web management path /goform/fast_setting_wifi_set, where a crafted ssid value can overflow a fixed 64-byte stack buffer. The public write-up ties it to firmware V1.0.0.0, and Tenda's download pages only expose that same V1.0.0.0 build for A21; one regional support page also labels the product end of life. In plain English: if an attacker can reach the extender's admin interface, they may be able to crash it or potentially execute code on the device.

The vendor-style 8.8 HIGH score is technically defensible in a lab because memory corruption on a network appliance can be ugly, but it overstates enterprise urgency. The real friction is attacker position: this device is a consumer Wi-Fi range extender whose management interface is typically reached locally during setup, not a broadly internet-exposed enterprise platform. Add the very low EPSS, no KEV listing, and only a public issue-level PoC rather than mature exploit tooling, and this lands as MEDIUM for most enterprise patch queues.

"Dangerous on a reachable box, but this is mostly a LAN-side consumer-device problem, not a fleet-wide enterprise fire drill."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Reach the management plane with nmap or browser recon

The attacker first has to find a live Tenda A21 admin interface. In real deployments that usually means being on the same LAN, guest network, or a segment where the extender's setup UI is reachable via re.tenda.cn or its local management IP. If a site exposed remote admin to the internet, this step gets much easier, but that is not the normal baseline for this device class.
Conditions required:
  • Attacker can reach the A21 web interface over HTTP from the local network or an exposed WAN path
  • A21 hardware is actually deployed in the environment
Where this breaks in practice:
  • Most enterprises do not standardize on consumer Tenda extenders
  • NAT and default local-only setup patterns usually keep this off the public internet
  • Asset inventories often miss these devices, but segmentation often keeps them away from sensitive enclaves
Detection/coverage: External attack-surface scanners may catch exposed Tenda HTTP admin pages; internal NAC, DHCP fingerprinting, and rogue-device discovery are more useful than classic server vuln scans here.
STEP 02

Trigger the overflow with the public requests PoC from QIU-DIE

A public GitHub issue shows a Python requests proof of concept hitting /goform/fast_setting_wifi_set with an oversized ssid parameter. The CNA CVSS vector says PR:L, but the public PoC shown does not include an authenticated session, so the authentication requirement is inconsistent across sources. Practically, defenders should assume the minimum hard requirement is reachability to the management endpoint, and possibly a low-privilege admin session depending on configuration.
Conditions required:
  • The vulnerable endpoint exists on firmware 1.0.0.0
  • The request reaches the handler without being blocked
  • If authentication is actually enforced on the target, the attacker has valid low-privileged access
Where this breaks in practice:
  • Source inconsistency around auth raises uncertainty about real exploitability
  • Management interfaces on small appliances often live behind local-only access controls
  • There is no evidence of mature mass-exploitation tooling beyond public disclosure material
Detection/coverage: Look for abnormal requests to /goform/fast_setting_wifi_set, especially oversized ssid values. IDS/WAF coverage is usually weak because these appliances sit behind the perimeter rather than in front of it.
STEP 03

Convert crash into code execution in embedded httpd

The public write-up identifies unsafe sprintf usage into a 64-byte stack buffer, which makes denial-of-service easy and code execution plausible. Turning a buffer overflow into stable RCE on embedded firmware is harder than making the process fall over, because gadget availability, architecture quirks, and watchdog behavior all matter. That gap is why public PoC does not automatically equal dependable weaponization.
Conditions required:
  • Target runs the vulnerable code path and architecture-specific exploit assumptions hold
  • The attacker can shape memory state well enough for more than a crash
Where this breaks in practice:
  • Embedded exploit reliability is lower than generic web-app RCE
  • Many real attacks stop at DoS rather than controlled code execution
  • Reboots and watchdogs may shorten persistence windows
Detection/coverage: Device reboots, web UI crashes, and config resets are the best signals. Traditional EDR does not exist on the appliance, so network telemetry and syslog collection matter.
STEP 04

Use the compromised extender as a local foothold

If the attacker gets execution, the device can be used to tamper with traffic, alter DNS behavior, or stage follow-on attacks against clients behind or near it. That sounds scary, but the blast radius is usually the local branch, guest network, or small office segment where the extender lives. This is operationally annoying and sometimes dangerous, but it is not the same as instant domain-wide compromise.
Conditions required:
  • Successful code execution or persistent config control on the A21
  • Victim traffic actually traverses or trusts the extender
Where this breaks in practice:
  • Many enterprises isolate guest and IoT-style network gear from crown-jewel assets
  • A single extender rarely provides privileged reach into core infrastructure
Detection/coverage: Monitor for rogue DNS, unexpected config drift, unusual ARP/DHCP behavior, and traffic redirection from segments where A21 devices are present.
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNo confirmed active exploitation found in primary sources reviewed. CISA KEV does not show a listing for this CVE as of this review.
Public exploitabilityYes, there is a public GitHub issue/PoC by QIU-DIE describing the bug and showing a Python requests trigger against /goform/fast_setting_wifi_set.
EPSSUser-supplied EPSS is 0.00112, which is very low. Public third-party aggregators reviewed also show low probability bands rather than anything screaming imminent mass exploitation.
KEV statusNot KEV-listed based on CISA catalog review; no federal urgency signal.
CVSS vector readCVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H means the CNA assumes network reachability, low complexity, no user interaction, and high impact to the device. The big real-world question is the PR:L assumption versus the PoC's apparent unauthenticated request flow.
Affected versionsAuthoritative sources reviewed point to Tenda A21 firmware V1.0.0.0. No broader affected train was documented.
Fixed versionNo fixed firmware version was identified in vendor pages reviewed. Tenda download listings still expose V1.0.0.0, and one regional support page labels A21 end of life.
Exposure realityNo trustworthy public Shodan/Censys count was validated during review. Inference: enterprise exposure is probably limited because A21 is a consumer range extender whose admin UI is usually local-side, not a common internet-facing enterprise service.
Disclosure timelinePublished 2026-02-21 in NVD/CVE-linked feeds; the public GitHub issue was opened 2026-02-09.
Researcher / reporting sourceCVE record source is VulDB; public technical write-up/PoC was posted by QIU-DIE on GitHub.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to MEDIUM (5.6/10)

The decisive downshift is attacker position: this bug matters only after an attacker can reach a small-appliance admin interface that is usually local-side and sparsely deployed in enterprise fleets. The impact on a single reachable device may be severe, but the reachable population and likely blast radius are much narrower than the vendor-style 8.8 HIGH suggests.

HIGH Affected version is `A21 V1.0.0.0`
MEDIUM Authentication requirement is inconsistent across public sources
HIGH Enterprise-wide exposure is typically limited for this device class

Why this verdict

  • Downward pressure: requires management-plane reachability — this is not a drive-by browser bug; the attacker must reach the extender admin interface first.
  • Downward pressure: product population is narrow — Tenda A21 is a consumer Wi-Fi range extender, not a mainstream enterprise platform across 10,000-host fleets.
  • Downward pressure: exploitation evidence is weak — public disclosure and a PoC exist, but there is no KEV listing, no confirmed campaign reporting, and EPSS is very low.
  • Residual risk keeps it above LOW — if you do have these devices in branches, guest networks, or shadow IT, a memory-corruption bug on a network appliance can still enable local traffic manipulation or a foothold.

Why not higher?

It is not HIGH because the attack path is narrower than the CVSS score implies. The prerequisite of reaching a lightly managed consumer-device admin UI sharply limits exposed population, and there is no strong evidence of broad operational exploitation. It is not CRITICAL because there is no KEV signal, no verified internet-scale exposure, and no evidence that exploitation is trivial and reliable across real deployments.

Why not lower?

It is not LOW because this is still a remotely reachable memory-corruption flaw on a network device, with a public PoC and plausible code-execution impact. If an A21 is present on a branch, guest, or lab segment, compromise can affect traffic integrity and create a meaningful local foothold.

05 · Compensating Control

What to do — in priority order.

  1. Block admin access from untrusted networks — Restrict the A21 management UI to a dedicated management subnet or a directly connected staging host only. For a MEDIUM verdict there is no mitigation SLA, but this is the highest-value containment step whenever these devices are discovered.
  2. Retire or replace A21 units — Vendor pages reviewed do not show a fixed firmware, and one regional support page marks the product end-of-life. Use the 365-day remediation window for MEDIUM findings to remove or replace any A21 found in enterprise use.
  3. Move extenders off sensitive segments — If removal is not immediate, place discovered A21 devices on guest/IoT-style VLANs with no management path into core infrastructure. This reduces the blast radius while you work through the MEDIUM-severity remediation window.
  4. Watch for crashes and config drift — Because exploitation may present first as web UI instability or reboots rather than polished RCE, collect whatever syslog, DHCP, DNS, and network behavior you can from segments using these devices. This is a cheap way to spot abuse on gear that cannot run EDR.
What doesn't work
  • Changing the admin password alone does not solve the memory corruption bug; it only helps if the interface truly enforces auth, which is unclear across sources.
  • Rebooting the extender does not remove the vulnerable code path.
  • Perimeter WAF rules usually do not help because these devices are commonly managed on local-side networks, not behind enterprise web protections.
06 · Verification

Crowdsourced verification payload.

Run this from an auditor workstation that can reach the suspected Tenda device over HTTP. Invoke it as python3 check_tenda_a21_cve_2026_2874.py http://192.168.0.254 or python3 check_tenda_a21_cve_2026_2874.py http://re.tenda.cn; no admin rights are required, but network reachability to the device is.

noisgate-verify.py
PYTHONREAD-ONLYSAFE
#!/usr/bin/env python3
# check_tenda_a21_cve_2026_2874.py
# Identify likely Tenda A21 devices and flag firmware 1.0.0.0 as VULNERABLE.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN, 3=USAGE/ERROR

import re
import sys
import ssl
import urllib.request
import urllib.error
from urllib.parse import urljoin

TIMEOUT = 5
PAGES = [
    "/",
    "/index.html",
    "/login.html",
    "/main.html",
    "/status.html",
    "/overview.html",
]

A21_RE = re.compile(r"\bTenda\b.*\bA21\b|\bA21\b.*\bTenda\b", re.I | re.S)
VER_RE = re.compile(r"\bV?1\.0\.0\.0\b")
ANY_VER_RE = re.compile(r"\bV?(\d+\.\d+\.\d+\.\d+)\b")

ctx = ssl.create_default_context()
ctx.check_hostname = False
ctx.verify_mode = ssl.CERT_NONE


def fetch(url):
    req = urllib.request.Request(url, headers={"User-Agent": "noisgate-a21-check/1.0"})
    with urllib.request.urlopen(req, timeout=TIMEOUT, context=ctx) as resp:
        body = resp.read(1024 * 512)
        ctype = resp.headers.get("Content-Type", "")
        server = resp.headers.get("Server", "")
        return body.decode("utf-8", errors="ignore"), ctype, server


def normalize_base(base):
    if not base.startswith("http://") and not base.startswith("https://"):
        base = "http://" + base
    return base.rstrip("/") + "/"


def main():
    if len(sys.argv) != 2:
        print("UNKNOWN - usage: python3 check_tenda_a21_cve_2026_2874.py <base_url_or_ip>")
        sys.exit(3)

    base = normalize_base(sys.argv[1])
    found_a21 = False
    found_vuln_ver = False
    found_other_ver = None
    errors = []

    for path in PAGES:
        url = urljoin(base, path.lstrip("/"))
        try:
            text, ctype, server = fetch(url)
            haystack = "\n".join([text, ctype, server])
            if A21_RE.search(haystack):
                found_a21 = True
            if VER_RE.search(haystack):
                found_vuln_ver = True
            else:
                m = ANY_VER_RE.search(haystack)
                if m:
                    found_other_ver = m.group(1)
        except (urllib.error.URLError, urllib.error.HTTPError, TimeoutError, ssl.SSLError) as e:
            errors.append(f"{url}: {e}")
            continue
        except Exception as e:
            errors.append(f"{url}: {e}")
            continue

    if found_a21 and found_vuln_ver:
        print("VULNERABLE - Tenda A21 detected with firmware 1.0.0.0 markers")
        sys.exit(1)

    if found_a21 and found_other_ver and found_other_ver != "1.0.0.0":
        print(f"PATCHED - Tenda A21 detected with non-vulnerable version marker {found_other_ver}")
        sys.exit(0)

    if found_a21:
        print("UNKNOWN - Tenda A21 detected but firmware version could not be confirmed")
        sys.exit(2)

    if errors:
        print("UNKNOWN - target reachable status/version not confirmed; sample error: " + errors[0])
    else:
        print("UNKNOWN - no Tenda A21 markers found")
    sys.exit(2)


if __name__ == "__main__":
    main()
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning, do not treat this like a top-of-queue internet RCE unless you actually have Tenda A21 units in scope. First, use NAC, DHCP, rogue-device discovery, and branch inventory to find any A21 extenders; there is no noisgate mitigation SLA — go straight to the 365-day remediation window for this MEDIUM finding, but discovered units should be kept off untrusted management paths as basic hygiene. Because no fixed firmware was identified in vendor sources reviewed, use the noisgate remediation SLA to retire or replace any A21 devices within 365 days rather than waiting for a patch that may never arrive.

Sources

  1. NVD CVE-2026-2874
  2. GitHub PoC / technical write-up by QIU-DIE
  3. Tenda Global A21 help/download page
  4. Tenda firmware download detail for A21 V1.0.0.0
  5. Tenda Russia A21 support page showing end-of-life label
  6. CISA Known Exploited Vulnerabilities Catalog
  7. OSV entry for CVE-2026-2874
  8. INCIBE summary for CVE-2026-2874
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.