PHP站点的用户数据库在近期的源代码后门攻击中被黑客入侵

PHP站点的用户数据库在近期的源代码后门攻击中被黑客入侵

目录导航

PHP编程语言的维护者已发布有关上个月下半年发生的安全事件的更新,指出攻击者可能已经拥有包含其密码的用户数据库,以对存储库进行未经授权的更改。

Nikita Popov在4月6日发布在其邮件列表中的消息中说: “我们不再认为git.php.net服务器已经受到威胁。但是,master.php.net用户数据库很可能泄漏了。”

3月28日,身份不明的参与者使用Rasmus Lerdorf和Popov的名称将恶意提交推送到git.php.net服务器上托管的“ php-src”存储库,该存储库涉及在一个实例中向PHP源代码添加后门。软件供应链攻击。

根据访问日志,我们可以确定确实
使用HTTPS和基于密码的身份验证推送了提交。相关日志
条目的摘录如下所示:
[redacted] - [email protected][redacted] [27/Mar/2021:19:19:23 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - [email protected][redacted] [27/Mar/2021:19:19:28 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - rasmus [27/Mar/2021:20:56:51 -0700] "GET
/push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 125315
[redacted] - rasmus [27/Mar/2021:20:58:13 -0700] "POST
/push/php-src.git/git-receive-pack HTTP/1.1" 200 1080
[redacted] - nikita.ppv [28/Mar/2021:09:09:15 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikita.ppv [28/Mar/2021:09:09:18 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikitappv [28/Mar/2021:09:09:35 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikitappv [28/Mar/2021:09:09:36 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikita [28/Mar/2021:09:09:50 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikita [28/Mar/2021:09:09:53 -0700] "GET
/push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
[redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET
/push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941
[redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET
/push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941
[redacted] - nikic [28/Mar/2021:09:13:28 -0700] "GET
/push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 123263
[redacted] - nikic [28/Mar/2021:09:13:39 -0700] "POST
/push/php-src.git/git-receive-pack HTTP/1.1" 200 1079

虽然最初将其视为git.php.net服务器的危害,但对该事件的进一步调查显示,这些提交是由于使用HTTPS和基于密码的身份验证将其推送而导致的,从而导致他们怀疑该漏洞可能会泄露 master.php.net用户数据库。

Popov说:“ git.php.net(有意)支持不仅通过SSH(使用Gitolite基础设施和公共密钥密码学)而且通过HTTPS推动更改。” “后者没有使用Gitolite,而是在针对master.php.net用户数据库的Apache 2 Digest身份验证之后使用了git-http-backend 。”

“值得注意的是,攻击者只会对用户名进行一些猜测,并在找到正确的用户名后成功进行身份验证。虽然我们没有任何具体证据,但可能的解释是master.php的用户数据库.net已泄漏,尽管目前尚不清楚为什么攻击者在这种情况下需要猜测用户名。”

此外,据说master.php.net身份验证系统位于非常老的操作系统和PHP版本上,这增加了攻击者也可能利用软件中的漏洞进行攻击的可能性

最终,维护人员已经将master.php.net迁移到支持TLS 1.2的新main.php.net系统,除了重置所有现有密码并使用bcrypt代替普通的MD5哈希存储密码。

原始文件:

大家好,

我想提供有关git.php.net安全
事件的更新。简要总结最重要的信息:

 *我们不再相信git.php.net服务器已经受到威胁。
但是,master.php.net用户数据库有可能泄漏。
 *master.php.net已迁移到新系统main.php.net。
 *所有php.net密码均已重置。转到https://main.php.net/forgot.php设置新密码。
 *git.php.net和svn.php.net现在都是只读的,但暂时仍然可用。
以下是对发生的情况以及采取了哪些措施的更详细的说明。



当以Rasmus的名义进行第一次恶意提交时,我的最初反应是还原更改并撤消Rasmus
帐户的提交访问权限,但前提是这是个人帐户的折衷。
事后看来,此举实际上并没有什么意义,因为(当时)没有理由相信这一推动是通过Rasmus的
账户进行的。任何有权访问php-src信息库的帐户都可以使用错误的名称执行推送。

当以我自己的名义进行第二次恶意提交时,我查看
了gitolite安装的日志,以确定实际使用哪个帐户执行推送。但是,尽管所有相邻的提交都是
考虑到这两个恶意提交都没有git-receive-pack条目,这意味着这两个提交完全绕过了gitolite基础架构。这被解释为服务器受损的可能证据。

在那之后不久,我们决定终止git.php.net,而将GitHub设为我们的主要存储库宿主。
在确定损害的根本原因之后,要保留我们自己的Git基础结构,就需要设置新的git.php.net服务器。这将花费大量时间,并同时中断PHP开发。
由于大多数存储库都可以迁移到GitHub,因此可以更快地完成向GitHub的基本迁移。
已经在那儿镜像了。在这一点上,无论如何,GitHub已经进行了大量开发,而我们自己的Git基础结构主要是安全责任,并给开发工作流程带来了麻烦,因此做出切换并不是一个艰难的决定。

当时我还没有意识到的是git.php.net (有意地)不仅支持通过SSH(使用gitolite基础设施和公共密钥密码学)而且还通过HTTPS推送更改。
后者不使用gitolite,而是在针对master.php.net用户数据库的Apache2 Digest身份验证之后使用了git-http-backend 。我不确定为什么第一个支持基于密码的身份验证位置,因为它比pubkey身份验证的安全性低得多。

根据访问日志,我们可以确定确实使用HTTPS和基于密码的身份验证推送了提交。相关日志
条目的摘录如下所示:

[redacted] - [email protected][redacted] [27/Mar/2021:19:19:23 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - [email protected][redacted] [27/Mar/2021:19:19:28 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - rasmus [27/Mar/2021:20:56:51 -0700] "GET
 /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 125315
 [redacted] - rasmus [27/Mar/2021:20:58:13 -0700] "POST
 /push/php-src.git/git-receive-pack HTTP/1.1" 200 1080
 [redacted] - nikita.ppv [28/Mar/2021:09:09:15 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikita.ppv [28/Mar/2021:09:09:18 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikitappv [28/Mar/2021:09:09:35 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikitappv [28/Mar/2021:09:09:36 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikita [28/Mar/2021:09:09:50 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikita [28/Mar/2021:09:09:53 -0700] "GET
 /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941
 [redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET
 /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941
 [redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET
 /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941
 [redacted] - nikic [28/Mar/2021:09:13:28 -0700] "GET
 /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 123263
 [redacted] - nikic [28/Mar/2021:09:13:39 -0700] "POST
 /push/php-src.git/git-receive-pack HTTP/1.1" 200 1079
值得注意的是,攻击者仅对用户名进行了一些猜测,并且找到正确的用户名后,便可以成功进行身份验证。尽管我们没有任何具体的证据,但可能的解释是master.php.net的用户数据库已泄漏,尽管目前尚不清楚为什么攻击者需要在这种情况下猜测用户名。

用于身份验证和各种管理任务的master.php.net系统在非常老的操作系统
/ PHP版本上运行了非常老的代码,因此某种漏洞不足为奇。我们进行了许多更改以提高
此系统的安全性:

 *master.php.net已迁移到新系统(运行PHP 8)并已重命名
同时访问main.php.net。除其他外,新系统支持TLS 1.2,这意味着您
在访问该站点时将不再看到TLS版本警告。
*该实现已转向使用参数化查询,以更加确信不会发生SQL注入。
 *密码现在使用bcrypt存储。
 *重置现有密码(使用main.php.net/forgot.php生成一个新密码)。

以前,密码以与HTTP摘要式身份验证兼容的格式存储(本质上是简单的md5哈希),这是
git.php.net和svn.php.net上的HTTP身份验证所必需的。由于已经制作了git.php.net
由于此事件而为只读,因此我们决定将svn.php.net也设为只读,从而无需以
不安全的格式存储密码。只有少数PECL扩展仍在使用SVN服务器。以下SVN存储库具有最近的活动,
并已迁移到GitHub:https: //github.com/php/pecl-authentication-krb5 https://github.com/php/pecl-caching-varnish https:// github.com/php/pecl-database-dbase https://github.com/php/pecl-datetime-hrtime https://github.com/php/pecl-datetime-timezonedb https://github.com/php / pecl-math-trader https://github.com/php/pecl-networking-geoip https://github.com/php/pecl-processing-rrd









https://github.com/php/pecl-system-expect 
https://github.com/php/pecl-text-pdflib 
https://github.com/php/pecl-tools-svn 
https:// github .com / php / pecl-xml-
 
xmldiff如果需要其他迁移或权限
调整,请通过[email protected]与我联系。还请报告您在
main.php.net上遇到的任何问题-迁移期间可能会发生某些问题。

问候,
Nikita

from

Leave a Reply

您的电子邮箱地址不会被公开。