Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

未经检查的用户上传材质可能导致远程代码执行 #10

Closed
yushijinhun opened this issue Apr 19, 2018 · 4 comments
Closed

Comments

@yushijinhun
Copy link
Owner

yushijinhun commented Apr 19, 2018

参考:

如果攻击者向 Yggdrasil 服务端上传了一个精心设计的材质,并且 Yggdrasil 服务端对此材质并未进行任何处理,那么客户端将其获取到本地后,可能造成远程代码执行(前提是客户端处理此图像的类库存在漏洞)。

需要注意的是,此漏洞单独而言无法对客户端造成威胁,必须配合客户端的其他漏洞才能被利用。
而由于图像处理类库出现漏洞的情况较为罕见,该漏洞被利用的可能性较低。

解决方法:Yggdrasil 服务端必须对用户上传的材质进行处理,绝不能直接保存用户上传的材质。具体方法为将上传的图像解析后再重新写入,丢弃掉任何与图像本身无关的成分。在解析前需要对图像大小等进行检查,以防拒绝服务攻击。

注意:即使 PNG 文件的文件大小很小,但其存储的图像也可能奇大无比(即 PNG Bomb)。

参考:https://www.bamsoftware.com/hacks/deflate.html

此解决方法需要写入文档。

@yushijinhun
Copy link
Owner Author

yushijinhun commented Apr 19, 2018

除上面所述外,浏览器也是一个攻击面。如果 Yggdrasil 服务端返回的图像没有指明 content-type,那么攻击者可以进行 content-type sniffing 攻击。

解决方法:服务端指明材质的 content-type 为 image/png

我会在 yggdrasil-mock 的测试样例中增加对此漏洞的检测。

参考:https://security.stackexchange.com/questions/8587/how-can-i-be-protected-from-pictures-vulnerabilities

@yushijinhun yushijinhun changed the title 未经检查的用户上传材质可导致远程代码执行 未经检查的用户上传材质可能导致远程代码执行 Apr 19, 2018
@yushijinhun yushijinhun self-assigned this Apr 21, 2018
@yushijinhun
Copy link
Owner Author

已在 1a94cd7f9578e6510425a2c470b5c4d246017dd8 中增加对用户上传材质安全性的说明。

@yushijinhun
Copy link
Owner Author

关于防止 content-type sniffing 攻击的提醒已添加到文档。a84d9f25383ca3b7ae65929113ff560b0ae0e5e2

@yushijinhun
Copy link
Owner Author

已在 yushijinhun/yggdrasil-mock@3d35c78 中添加对 Content-Type 的检查。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant