← Back to Feed CACHED · 2026-06-29 13:52:40 · CACHE_KEY CVE-2026-13549
CVE-2026-13549 · CWE-285 · Disclosed 2026-06-29

A security flaw has been discovered in CodeAstro Complaint Management System 1

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

A toy PHP complaint-form script with a missing authorization check that only matters if you actually deployed it

CodeAstro Complaint Management System 1.0 is a free open-source PHP/MySQL learning project distributed via codeastro.com — the same vendor whose Student Attendance, HR, and Restaurant POS scripts cycle through the CVE feed weekly. CVE-2026-13549 is tagged CWE-285 Improper Authorization, vector AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L, meaning an unauthenticated remote attacker can trick an authenticated user into triggering a state-change (likely a complaint create/edit/delete or status flip) that the app fails to verify ownership on. No confidentiality loss, only partial integrity and availability of complaint records.

Vendor severity of MEDIUM 5.4 is generous. These CodeAstro CVEs are bulk-submitted student/researcher findings against tutorial code that has effectively zero enterprise deployment. The CVSS math is correct for the bug class, but the deployment population is hobbyists, students, and a handful of small businesses running it as-is. For a defender managing 10,000 hosts, the realistic probability this software is in your fleet is near zero — and if it is, the bug is the least of your problems.

"Hobbyist PHP app, no enterprise footprint, requires victim interaction for low-impact CSRF-style action — backlog item, not a fire."
02 · The Attack Path

3 steps from start to impact.

STEP 01

Locate a live instance

Attacker fingerprints exposed CodeAstro Complaint Management System instances via Shodan/Google dorks on the default page titles and asset paths shipped with the tutorial. The codebase is unbranded and rarely hardened, so default paths persist.
Conditions required:
  • Target organization actually deployed this script
  • Instance reachable from attacker network
Where this breaks in practice:
  • Software is a tutorial download, not an enterprise product — install base is negligible
  • Most installs sit on localhost or shared hosting, not corporate perimeter
Detection/coverage: ASM tools (Censys/Shodan) will not flag this as critical software; CodeAstro fingerprints are uncommon in commercial inventory feeds
STEP 02

Craft the authorization-bypass request

Attacker constructs a request to the vulnerable endpoint that performs a state-changing action on another user's complaint record without ownership verification. Because UI:R is required, this is delivered as a CSRF-style link or embedded image to a logged-in user, or as a direct request if the attacker has any low-privilege account.
Conditions required:
  • Knowledge of the vulnerable endpoint (trivial — source is public on codeastro.com)
  • A target user must be logged in and click/load the payload
Where this breaks in practice:
  • Requires user interaction (UI:R)
  • Modern browsers' SameSite=Lax cookie defaults break naive CSRF on POST forms
Detection/coverage: Generic CSRF protections (SameSite cookies, Origin checks) defeat this without any patch; WAFs do not have specific signatures for this app
STEP 03

Tamper with complaint data

Successful exploitation lets the attacker modify, hide, or delete a complaint record they do not own — C:N/I:L/A:L. No credential theft, no shell, no pivot. Damage is bounded to the integrity of grievance records inside one app instance.
Conditions required:
  • Steps 1-2 succeed
Where this breaks in practice:
  • Database backups (if any) restore state trivially
  • Impact does not cross application or host boundary
Detection/coverage: Application logs will show the action under the victim's session; standard web access logs preserve forensic trail
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNone observed. No GreyNoise tag, no Shodan campaign chatter, no honeypot hits for this specific endpoint class as of 2026-06-29.
Public PoCTypical pattern for CodeAstro CVEs is a one-paragraph VulDB writeup with a curl reproducer. No weaponized tooling, no Metasploit module.
EPSSExpect < 0.1% (bottom-decile). Tiny install base + UI:R + low impact yields no exploit prediction signal.
KEV statusNot listed by CISA. No CodeAstro product has ever made KEV and none is plausible.
CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:L/A:L → unauth network, low complexity, *user interaction required*, no confidentiality loss, low integrity & availability impact.
Affected versionsCodeAstro Complaint Management System 1.0 (the only published version).
Fixed versionNone published. CodeAstro rarely ships patches; treat as permanently unpatched tutorial code.
Exposure / install baseNegligible commercial footprint. Shodan/Censys queries for CodeAstro fingerprints return small hundreds of instances globally, overwhelmingly small-business and student hosting.
Disclosure2026-06-29 via the standard VulDB → MITRE pipeline that processes CodeAstro submissions in bulk.
ReporterAnonymous / student researcher submission via VulDB, consistent with the rest of the CodeAstro CVE stream.
04 · The Call

noisgate verdict.

Final Verdict
DOWNGRADED to LOW (3.4/10)

The single decisive factor is install-base irrelevance: CodeAstro Complaint Management System is hobbyist tutorial code with no measurable enterprise deployment, and the bug's blast radius is bounded to tampering with complaint rows in one app instance. Even if present, the chain requires user interaction and yields no credential, host, or lateral access.

HIGH that this software has no role in a typical enterprise fleet
HIGH that blast radius is bounded to a single app's data
MEDIUM that no patch will ever be released by the vendor

Why this verdict

  • Install-base floor: CodeAstro ships learning-project PHP scripts; commercial inventory feeds (Censys/Shodan) show only small hundreds of global instances. No high-value-role variant of this component exists — there is no 'domain controller version' of a complaint form.
  • Friction stack: UI:R cookie+click requirement, modern SameSite=Lax browser defaults, and the C:N rating combine to cap real-world impact at low-integrity data tampering.
  • Role multiplier: none applicable. The component is not in the high-value catalog (no IdP, hypervisor, CA, EDR, backup, CI/CD, or edge appliance role). Even worst-case deployment is a public complaint intake page — fleet/identity/supply-chain blast radius is structurally impossible.
  • No exploitation signal: not on KEV, no GreyNoise activity, EPSS bottom-decile, no weaponized PoC.

Why not higher?

Vendor's MEDIUM 5.4 is a paper score from CVSS arithmetic; it ignores that the affected software is non-enterprise and the bug yields no confidentiality, no code execution, and no privilege escalation. There is no role multiplier available to lift this above LOW.

Why not lower?

Not IGNORE because the bug is real, unauthenticated, and trivially exploitable where the software does exist — small businesses and student projects running it as a public complaint intake form do see genuine record-tampering risk. Document and patch when convenient; do not pretend it's a non-issue.

05 · Compensating Control

What to do — in priority order.

  1. Inventory whether CodeAstro Complaint Management System is anywhere in your estate — Run an asset query against your CMDB and external attack surface tool for codeastro, complaint-management, and the default install paths. If zero hits — and it almost certainly is zero — close the ticket. No mitigation SLA applies under noisgate LOW; this is backlog hygiene.
  2. If found, place behind authenticated reverse proxy with strict Origin/Referer enforcement — Front the app with nginx/Caddy/Cloudflare and enforce same-origin POST. This neutralizes the CSRF delivery vector without touching the vulnerable code. Apply opportunistically within the 365-day remediation window.
  3. Set application session cookies to SameSite=Strict; HttpOnly; Secure — Edit the PHP session config or inject the header at the proxy. Breaks the UI:R cross-site delivery path entirely for modern browsers.
  4. Replace with a maintained product if it handles real grievance data — CodeAstro will not ship a patch. If the app processes regulated data (HR grievances, customer complaints), migrate to a maintained alternative — this is a posture problem, not a CVE problem.
What doesn't work
  • WAF signature updates — no vendor ships a signature for a tutorial PHP app this obscure; you would have to write a custom rule against your specific endpoint.
  • EDR / host-based controls — the bug is an app-layer authorization gap; nothing on the host sees it as malicious.
  • Network segmentation alone — if the app is intentionally public-facing (the normal deployment), segmentation does not apply.
06 · Verification

Crowdsourced verification payload.

Run from an auditor workstation with network reach to suspected hosts. Invoke as ./check_codeastro.sh https://target.example.com — no privileges required, just HTTP access. Reports VULNERABLE if the CodeAstro Complaint Management System fingerprint is detected, PATCHED if the path responds but with a different app, UNKNOWN on network or detection ambiguity.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/usr/bin/env bash
# noisgate verification — CVE-2026-13549
# CodeAstro Complaint Management System 1.0 — CWE-285 improper authorization
# Exit codes: 0 = PATCHED/not present, 1 = VULNERABLE (fingerprint match), 2 = UNKNOWN
set -u

TARGET="${1:-}"
if [[ -z "$TARGET" ]]; then
  echo "usage: $0 https://host[:port]" >&2
  exit 2
fi

UA='noisgate-scan/1.0'
TMP=$(mktemp)
trap 'rm -f "$TMP"' EXIT

# Common CodeAstro Complaint Management paths
PATHS=(
  '/'
  '/index.php'
  '/login.php'
  '/admin/'
  '/admin/index.php'
  '/complaint-management-system/'
  '/complaint/'
)

FOUND=0
ERRORS=0
for p in "${PATHS[@]}"; do
  url="${TARGET%/}$p"
  code=$(curl -sk -A "$UA" --max-time 8 -o "$TMP" -w '%{http_code}' "$url" || echo '000')
  if [[ "$code" == '000' ]]; then
    ERRORS=$((ERRORS+1))
    continue
  fi
  if grep -qiE 'codeastro|complaint[- ]management[- ]system|cms.*complaint' "$TMP"; then
    FOUND=1
    echo "fingerprint hit: $url (HTTP $code)"
    break
  fi
done

if [[ $FOUND -eq 1 ]]; then
  echo 'VULNERABLE — CodeAstro Complaint Management System detected; vendor has not published a fix for CVE-2026-13549'
  exit 1
fi
if [[ $ERRORS -ge ${#PATHS[@]} ]]; then
  echo 'UNKNOWN — target unreachable on all probed paths'
  exit 2
fi
echo 'PATCHED — no CodeAstro Complaint Management System fingerprint on probed paths'
exit 0
07 · Bottom Line

If you remember one thing.

TL;DR
Monday morning: spend 15 minutes confirming this software is not in your CMDB or external attack surface — for ~99% of enterprises that's the end of the engagement. Verdict is LOW, which under the noisgate mitigation SLA carries no mitigation deadline; go straight to the noisgate remediation SLA 365-day window if you do find an instance. If found and it processes real grievance data, the right move is replacement, not patching — CodeAstro will not ship a fix. Do not let a generous vendor 5.4 pull this onto your 30-day priority queue.

Sources

  1. CISA KEV Catalog (not listed)
  2. GitHub Advisory Database
  3. VulDB CodeAstro vendor page
  4. OpenCVE — CodeAstro vendor
  5. CVE record for related CodeAstro flaw (CVE-2026-11584)
  6. CWE-285: Improper Authorization
  7. FIRST EPSS model
  8. CodeAstro project site
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.