← Back to Feed CACHED · 2026-09-16 09:48:07 · CACHE_KEY CVE-2026-89026
CVE-2026-89026 · CWE-321 · Disclosed 2026-09-15

The Issabel Framework

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

The master key was printed on every lock sold, and burglars figured it out before the locksmith told anyone

CVE-2026-89026 is a hard-coded HS256 JWT signing key embedded in the Issabel Framework's pbxapi/index.php file. Because the secret is identical across every installation, any attacker who reads the source can forge a valid bearer token, call the Asterisk Manager Interface's Originate action with the System application parameter, and execute arbitrary OS commands as the asterisk user. All versions of the Issabel Framework prior to commit b97dbaf are affected — there is no version-range nuance; if you haven't pulled that commit, you're vulnerable.

The vendor's CRITICAL / 9.8 rating is honest and, if anything, slightly generous to the vendor for acknowledging it clearly. The attack requires zero authentication, zero user interaction, and zero complexity — the key is literally in the public source tree. Shadowserver observed active exploitation six days before the CVE was even published (2026-09-09 vs. 2026-09-15), meaning adversaries were already scanning and popping boxes while defenders had no advisory to act on. This is a textbook worst-case for a hardcoded credential class vulnerability.

"Hardcoded JWT key = unauthenticated RCE on every Issabel PBX, already exploited in the wild"
02 · The Attack Path

5 steps from start to impact.

STEP 01

Extract the hardcoded JWT secret

The attacker reads the Issabel Framework source code (public on GitHub) and extracts the HS256 signing key from pbxapi/index.php. No reverse engineering or brute-forcing is required — the key is a static string compiled into every deployment. This step can be done offline in seconds.
Conditions required:
  • Access to Issabel Framework source code (public GitHub repo)
Where this breaks in practice:
  • None — the source is publicly available
STEP 02

Forge a valid JWT bearer token

Using any JWT library (e.g., PyJWT, jwt-cli, or jwt.io), the attacker creates a token with the required claims and signs it with the extracted HS256 secret. The resulting token is indistinguishable from one issued by a legitimate Issabel login. No timing, CSRF, or session-binding checks gate this step.
Conditions required:
  • Knowledge of the hardcoded key (from step 1)
  • Knowledge of expected JWT claim structure
Where this breaks in practice:
  • None — standard JWT tooling works out of the box
STEP 03

Locate an internet-facing Issabel instance

The attacker scans for Issabel PBX instances using Shodan (title:issabel), Censys, or FOFA. Issabel's default web UI exposes identifiable HTML titles and HTTP headers. Many SMB and LATAM deployments expose the management interface directly to the internet without a VPN or WAF.
Conditions required:
  • Internet-exposed Issabel web UI on port 443 or 80
Where this breaks in practice:
  • Enterprises behind VPN/firewall are not directly reachable
  • Issabel has a relatively small global install base compared to major PBX platforms
Detection/coverage: Shodan/Censys queries for title:issabel reveal exposed instances; GreyNoise may tag scanning activity
STEP 04

Call the Originate endpoint with System application

The attacker sends an authenticated API request to the pbxapi manager originate endpoint, using the forged JWT as the Bearer token. The Application parameter is set to System and the Data parameter contains an arbitrary shell command. Asterisk executes the command as the asterisk user. On typical Issabel appliance installs, this user has broad filesystem access and may be able to escalate to root via sudo misconfigurations or known local privesc paths.
Conditions required:
  • Network access to the pbxapi endpoint
  • Forged JWT from step 2
Where this breaks in practice:
  • A properly configured reverse proxy or WAF blocking direct API access would stop this, but Issabel defaults do not include one
Detection/coverage: Web server access logs will show POST requests to the originate endpoint; IDS/IPS signatures for Asterisk AMI command injection patterns may fire
STEP 05

Establish persistence and pivot

With command execution as the asterisk user, the attacker drops a reverse shell or SSH key, escalates privileges on the appliance (often trivial on CentOS-based PBX appliances), and uses the PBX's network position to pivot into internal telephony VLANs, intercept calls, exfiltrate voicemail recordings, or launch toll fraud. The PBX often has connectivity to SIP trunks, internal extensions, and sometimes broader LAN segments.
Conditions required:
  • Successful command execution from step 4
Where this breaks in practice:
  • Network segmentation isolating the PBX from other LAN segments
  • EDR on the PBX host (rare on appliance deployments)
Detection/coverage: Anomalous outbound connections from PBX IP; unexpected process spawning under asterisk user; CDR anomalies indicating toll fraud
03 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationActive. Shadowserver Foundation observed exploitation activity starting 2026-09-09, six days before the CVE was published on 2026-09-15.
KEV StatusNot listed on CISA KEV as of 2026-09-16. Given active exploitation, KEV addition is likely imminent.
Proof of ConceptThe exploit is trivial to reproduce with any JWT library — the hardcoded key is in the public source code. No dedicated PoC repo is needed; the source code *is* the PoC.
EPSS ScoreNot yet scored (CVE published 2026-09-15). Expected to be high given zero-complexity, unauthenticated RCE with active exploitation.
CVSS v3.1 VectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — 9.8. Network-accessible, no auth, no interaction, full CIA impact. CVSS v4.0 scored at 9.3.
Affected VersionsAll versions of the Issabel Framework before commit b97dbaf0b71c1c36f841e672b664afbeb02773bd. No tagged release versions — the project uses rolling commits.
Fixed VersionCommit b97dbaf and later. The fix removes the hardcoded key and requires a per-installation generated secret.
Scanning / ExposureShodan query title:issabel identifies exposed instances. Issabel is popular in Latin American SMB telephony deployments. Exact internet-facing count is not publicly documented but estimated in the low thousands globally.
Disclosure TimelineExploitation observed 2026-09-09 → CVE reserved 2026-09-10 → CVE published 2026-09-15. This was a zero-day in active exploitation for at least 6 days.
Reporting OrganizationVulnCheck advisory; Shadowserver Foundation provided exploitation telemetry.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.6/10)

The single most decisive factor is active pre-disclosure exploitation of an unauthenticated, zero-complexity RCE chain — the hardcoded JWT key makes every unpatched Issabel instance immediately compromisable with no skill barrier. The vendor's CRITICAL rating is accurate; the trivial attack chain and confirmed in-the-wild exploitation leave no room for downgrade.

HIGH Vulnerability exists and is trivially exploitable as described
HIGH Active exploitation confirmed by Shadowserver
MEDIUM Enterprise exposure (most large enterprises do not run Issabel, but those that do are fully exposed)

Why this verdict

  • Zero-friction attack chain: The hardcoded key is in public source code, forging a JWT requires one CLI command, and the originate endpoint gives direct OS command execution. There are zero prerequisites beyond network reachability — no credentials, no user interaction, no race conditions.
  • Active pre-disclosure exploitation: Shadowserver observed attacks starting 2026-09-09, six days before the CVE was published. This was a zero-day being actively weaponized, which overrides any theoretical friction analysis.
  • Role multiplier: Issabel PBX is a unified communications appliance. In its typical deployment role, it sits on a telephony VLAN with connectivity to SIP trunks and internal extensions. A compromised PBX enables call interception, voicemail exfiltration, toll fraud, and lateral movement into internal network segments. While not a domain controller or hypervisor, PBX appliances function as network-adjacent infrastructure with sensitive data access (call recordings, contact directories). For organizations running Issabel, 100% of their Issabel instances occupy this role. The blast radius is host → telephony infrastructure → potential network pivot, which sustains CRITICAL.
  • Universal vulnerability: Unlike configuration-dependent bugs, the hardcoded key means every single unpatched instance is vulnerable with identical exploit code — no target-specific adaptation needed.
  • No compensating controls by default: Issabel ships without WAF, API rate limiting, or JWT key rotation. The default install is the vulnerable install.

Why not higher?

The score is already at 9.6/CRITICAL. A 10.0 would require wormable/self-propagating capability or automatic root-level access. The Asterisk user, while powerful on the appliance, is not root by default, and propagation requires attacker-driven scanning rather than self-replication.

Why not lower?

Downgrading below CRITICAL would require either significant friction in the attack chain (there is none — hardcoded key, public source, one API call) or a negligible blast radius. Active in-the-wild exploitation before disclosure eliminates any theoretical-only discount. Even though Issabel has a smaller install base than enterprise PBX platforms like Cisco CUCM, the combination of zero-skill exploitation and confirmed active attacks means every affected instance is in immediate danger.

05 · Compensating Control

What to do — in priority order.

  1. Block external access to Issabel web UI and pbxapi immediately — Place the Issabel management interface and pbxapi endpoint behind a VPN or firewall rule that restricts access to management workstations only. This is the single most effective control and should be deployed within the noisgate CRITICAL mitigation SLA of 3 days. If the PBX must be internet-facing, use a reverse proxy that strips or rejects requests to /pbxapi/.
  2. Rotate the JWT signing key manually — If you cannot immediately pull commit b97dbaf, manually replace the hardcoded key in pbxapi/index.php with a strong random secret (≥ 256-bit). This invalidates all forged tokens. Generate with openssl rand -hex 32. Deploy within 3 days per noisgate CRITICAL mitigation SLA.
  3. Monitor for originate endpoint abuse — Add a WAF rule or web server log alert for POST requests to the manager originate endpoint, especially those containing Application=System in the body. Any hit is likely malicious. Deploy monitoring within 3 days.
  4. Network-segment the PBX — Ensure the Issabel PBX is on an isolated VLAN with no routing to sensitive internal segments (AD, file servers, databases). This limits post-compromise lateral movement. Should already be in place; verify within 3 days.
  5. Audit for compromise indicators — Check web server access logs for unusual POST requests to /pbxapi/ endpoints, unexpected processes running under the asterisk user, new SSH keys in /var/lib/asterisk/.ssh/, and anomalous outbound connections. Given exploitation since 2026-09-09, assume breach if the instance was internet-exposed and unpatched.
What doesn't work
  • MFA on the Issabel web UI — the vulnerability bypasses the entire authentication system via forged JWTs, so MFA on the login page is irrelevant to the pbxapi endpoint.
  • TLS/HTTPS — encrypting the transport does not help when the attacker has the signing key and can forge valid tokens; the API will happily accept the forged JWT over HTTPS.
  • Asterisk ACLs (permit/deny in manager.conf) — the originate call comes from the local web framework, not an external AMI connection, so AMI IP restrictions do not block it.
06 · Verification

Crowdsourced verification payload.

Run this script on the Issabel PBX host itself as any user with read access to the web directory (typically root). Invoke with: sudo bash check_cve_2026_89026.sh. No arguments required.

noisgate-verify.sh
BASHREAD-ONLYSAFE
#!/bin/bash
# CVE-2026-89026 Checker — Issabel Framework Hardcoded JWT Key
# Run on the Issabel PBX host as root or a user with read access to the web root.
# Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN

PBXAPI_INDEX="/var/www/html/pbxapi/index.php"

if [ ! -f "$PBXAPI_INDEX" ]; then
  echo "UNKNOWN — $PBXAPI_INDEX not found. Is Issabel installed on this host?"
  exit 2
fi

# Check for hardcoded JWT key patterns.
# The vulnerable code contains a static string used as the HS256 secret.
# After the fix (commit b97dbaf), the key is loaded from a config file or environment.
if grep -qiE '(jwt_secret|signing_key|HS256)' "$PBXAPI_INDEX" 2>/dev/null; then
  # Look for hardcoded string assignment vs config-based loading
  if grep -qE "^[^/]*['\"][A-Za-z0-9+/=]{16,}['\"]" "$PBXAPI_INDEX" 2>/dev/null && \
     grep -qiE '(jwt|sign|secret|key)' "$PBXAPI_INDEX" 2>/dev/null; then
    # Check if the key is loaded from config/env (patched) or inline (vulnerable)
    if grep -qE '(getenv|parse_ini_file|include|require|config).*secret' "$PBXAPI_INDEX" 2>/dev/null; then
      echo "PATCHED — JWT secret appears to be loaded from configuration, not hardcoded."
      exit 0
    else
      echo "VULNERABLE — Hardcoded JWT signing key detected in $PBXAPI_INDEX."
      echo "Apply commit b97dbaf or later from IssabelFoundation/framework immediately."
      exit 1
    fi
  fi
fi

# Fallback: check the git commit if the repo is present
FRAMEWORK_DIR="/usr/share/issabel" # common install path
if [ -d "$FRAMEWORK_DIR/.git" ]; then
  if git -C "$FRAMEWORK_DIR" merge-base --is-ancestor b97dbaf HEAD 2>/dev/null; then
    echo "PATCHED — commit b97dbaf is in the current branch."
    exit 0
  else
    echo "VULNERABLE — commit b97dbaf is NOT in the current branch."
    exit 1
  fi
fi

echo "UNKNOWN — Could not definitively determine patch status. Manually inspect $PBXAPI_INDEX for a hardcoded JWT secret string."
exit 2
07 · Bottom Line

If you remember one thing.

TL;DR
If you run Issabel PBX anywhere in your environment, treat this as a hair-on-fire emergency. Active exploitation was observed by Shadowserver a full week before the CVE dropped, so assume any internet-exposed instance may already be compromised — run forensics first. Per the noisgate mitigation SLA for CRITICAL, block external access to the Issabel web UI and pbxapi endpoint and rotate the JWT signing key within 3 days (ideally today). Apply the vendor patch (commit b97dbaf from IssabelFoundation/framework) per the noisgate remediation SLA of 90 days, though given active exploitation you should prioritize pulling the fix this week. If you do not run Issabel PBX, confirm via asset inventory and move on — this does not affect you.

Sources

  1. OffSeq Threat Radar — CVE-2026-89026 Advisory
  2. THREATINT — CVE-2026-89026
  3. IssabelFoundation/framework GitHub Repository
  4. Shenlong CVE Platform — Issabel Hardcoded JWT Key Intel
  5. Shadowserver Foundation — Scans and Exploitation Telemetry
  6. Red Sentry — JWT Vulnerabilities List 2026
  7. Vulners — Issabel PBX CVE History
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.