漏洞分析:Atlassian Confluence 远程代码执行漏洞(CVE-2024-21683)

7 阅读1分钟

这是一个需要身份验证的 Atlassian Confluence 远程代码执行漏洞(详情请见:nvd.nist.gov/vuln/detail…

快速分析:

为了快速定位问题,我下载了两个版本的 Confluence 进行代码比对,并迅速找到了关键的变更点:

RhinoLanguageParser 类中,Context.initStandardObjects 被修改为了 Context.initSafeStandardObjects

通过简单的搜索,我了解到如果 RhinoLanguageParser 使用 initStandardObjects 方法,并且我们能够控制 cx.evaluateString 调用中的 script 变量(类似于 ScriptEngine),就可能导致远程代码执行:

cx.evaluateString(scope, script, "ParserScript", 0, (Object)null);

经过追踪,我找到了漏洞的源头(source)和汇聚点(sink):

  • 源头 (Source):
    • com.atlassian.confluence.ext.code.config.ConfigureNewcodeAction#addLanguage
    • com.atlassian.confluence.ext.code.languages.impl.RegisteredLanguageInstallerImpl#installLanguage
  • 过程:
    • com.atlassian.confluence.ext.code.languages.impl.RhinoLanguageParser#parseRegisteredLanguage
  • 汇聚点 (Sink):
    • com.atlassian.confluence.ext.code.languages.impl.RhinoLanguageParser#parseLanguage

关键在于,script 变量的内容是可控的!

PoC(概念验证):

我这里提供一个简单的 PoC 思路,具体的实现就留给各位读者自行探索了。

总结:

这个漏洞的根本原因在于,Confluence 在处理自定义语言时,使用了不安全的 Rhino 脚本引擎,并且允许经过身份验证的用户控制脚本内容。攻击者可以利用这个漏洞,在 Confluence 服务器上执行任意代码,从而完全控制服务器。

希望这个分析对大家有所帮助!请务必尽快修复此漏洞,以避免潜在的风险。