U交所

U交所(www.9cx.net)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

在举行身份验证控制和身份治理时,经常会使用单点登录(SSO)手艺,由于该手艺不仅便于用户使用,同时平安性也较高,以是,它很快就在种种组织和大型在线服务中盛行开来。这样做的利益是显而易见的:对于终端用户来说,对单一服务举行身份验证就能获得对所有所需应用的接见权限,这让生涯利便了许多;而对于治理员来说,可以在单个位置来控制凭证和权限。然而,凡事有利即有弊——这种便利性也为攻击者带来了新的时机:SSO身份验证流程中只要泛起一个破绽,就可能带来灾难性的结果,由于可能会露出组织使用的所有服务中存储的数据。

在本文中,我们将为读者先容NCC Group在对种种SSO服务举行平安审计历程中发现的一类破绽,详细来说,就是会影响平安断言符号语言(SAML)实现的破绽。这些破绽允许攻击者修改身份提供方天生的SAML响应,从而获得对随便用户账户的未经授权的接见,或在应用程序中提升自己的权限。

什么是SAML?

首先,下面简要先容一下SAML身份验证的详细流程。若是您已经熟悉SAML和SSO,则可以跳过本节。 

SAML是一个允许在差异上下文之间平安交流身份验证和授权数据的尺度。它通常用于Web应用程序,以提供SSO功效,并可以轻松地与Active Directory举行集成,从而使其成为在企业环境中使用的应用程序的盛行的身份验证方案。

身份验证历程依赖于两方之间的信托关系——身份提供方(对终端用户举行身份验证)和服务提供方(终端用户想要接见的应用)。在最常见的身份验证流程下,当用户想要接见服务提供方时,他们会被重定向到身份提供方,并发送SAML请求新闻

若是用户还没有登录,身份提供方就会对用户举行身份验证,若是验证乐成,就会通过SAML响应新闻(通常是在POST请求的主体中)将用户重定向到服务提供方。其中,SAML响应新闻将包罗一个确定用户身份的断言,并形貌一些条件(响应的过时时间和受众限制,以说明该断言对哪种服务有用)。之后,服务提供方将该验证响应的响应、断言和条件,只有在身份验证乐成的情形下才会向用户提供对应用程序的接见权限。 

为防止改动,对于SAML的响应和断言来说,至少需要对其中的一种举行加密署名处置,或者两者都举行加密署名,以便服务提供方检查它们是否被泛起被改动的情形。使用这种署名手艺后,恶意用户就很难修改断言中的用户标识符了,由于这样会导致署名不再有用。

关于SAML更深入的先容,请参阅https://www.pingidentity.com/en/resources/client-library/articles/saml.html。

XML注入破绽 

XML注入是一种先容资料对照齐全的破绽种别,它通常影响在后端行使XML或SOAP服务的“老式”Web应用。其中,一种对照常见的情形是用户输入被直接包罗在发送到后端服务器的XML新闻中。若是用户输入没有经由适当的验证或编码,攻击者就可以注入分外的XML,从而修改请求参数或挪用分外的功效。虽然在某些应用中仍然受该破绽的影响,但眼下XML注入已经不那么常见了,由于开发职员正在转向接纳基于JSON、YAML和协议缓冲区等较新数据花样构建的服务。

然而,对于SAML身份提供方来说,XML注入仍然是一个需要亲热关注的平安问题,由于在身份验证流程中构建的SAML新闻是基于XML的,而且包罗的数据通常来自不受信托的位置。若是这些数据被危险地包罗在SAML断言或响应新闻中,攻击者就有可能会注入分外的XML,并改变SAML新闻的结构。凭证注入的位置和服务提供方的设置,还可能注入分外的角色,修改断言的吸收者,或者注入一个全新的用户名,以试图入侵另一个用户的帐户。最主要的是,SAML断言和响应的XML总是在应用加密署名之前确立的。因此,使用响应署名并不能防御这种破绽。 

这种类型的破绽最常见于SAML身份提供方,由于它们直接使用字符串模板来构建SAML XML新闻,而用户控制的数据可以使用模板语言、正则表达式匹配/替换或简朴串联等方式插入到模板字符串中。固然,这种破绽并不只限于这种情形,纵然是使用适当的库构建XML的实现,若是库的使用不准确,也可能成为这个破绽的受害者。

在对SAML身份提供方举行平安评估的历程中,我们发现,攻击者可以乐成地行使XML注入破绽来修改署名的断言,从而获得对随便用户账户的未授权接见。

受影响的字段

在构建SAML响应和断言时,身份提供方可能会与由用户直接或间接控制的数据打交道。其中,显而易见的例子就是SAML NameID,它能唯一地标识用户(可能是数字标识符、用户名或电子邮件地址),以及服务提供方要求的附加属性,如用户的全名、电话号码或职业。

然而,在大多数的SAML实现中,有一些字段却是从SAML请求中获取的。下面提供了SAML请求中可能包罗在SAML响应/断言中的字段(固然,这里并不是最周全的):

· SAML请求的ID通常包罗在SAML响应的InResponseTo属性中。需要说明的是,在我们审查的身份提供方中,险些所有的实现都是在SAML响应中包罗了SAML请求的ID。因此,这个字段被以为是探测XML注入破绽最可靠的字段。

· Issuer字段,用于标识SAML请求的发出者,可以包罗在SAML断言的Audience字段中。

· IssueInstant字段,用于说明SAML请求天生的时间,可以包罗在断言条件的NotBefore属性中。

· Destination字段,用于说明吸收SAML请求的端点。该字段也可用于断言的Audience元素中。

此外,某些实现甚至包罗来自基本SAML身份验证流程之外的位置的数据。例如,在一个SAML身份提供方中,若是从未经由身份验证的客户端吸收到SAML请求,则服务器使用包罗SAML请求的ID的GET参数发出对登录页面的重定向。当用户输入凭证时,服务器将使用GET参数ID查找与SAML请求相关联的服务提供方,然后,在InResponseTo属性中使用这个ID来确立SAML响应。因此,通过修改登录请求中的ID GET参数,攻击者就可以在SAML响应中注入分外的XML。

识别破绽

这个破绽可以使用常见的XML注入的探测payload来识别。凭证在NCC Group平安评估时代考察到的情形,我们在内陆环境中重新确立了以下示例。首先,为了确定是否有可能举行XML注入,我们使用了一个阻挡署理来修改发送给身份提供方的SAML请求。该payload *** 入到请求的ID属性中(下面加粗),其目的是为了隶属性值中逃逸出来,并注入一个分外的属性值(ncctest);注重,该payload中的引号是XML编码的。这是为了确保请求的XML仍然有用;当这个值被身份提供方读取时,许多实现会对这些实体举行XML解码:

当身份提供方对此举行处置时,ID属性将直接放入SAML响应模板中,详细来说将被放入samlp:Response和saml:SubjectConfirmationData元素的InResponseTo属性中:

若是这个测试乐成,则可以实验在响应中注入分外的XML元素。虽然修改属性是很有趣的事情,但并不是稀奇有用;若是能够注入分外的XML,攻击者就能够修改SAML断言,并最终获得对另一个用户账户的未授权接见。

作为一个基本的测试,下面的SAML请求被用来注入一个分外的XML元素(ncc-elem)到响应中。与之前一样,引号和尖括号也是XML编码的。同时,请注重这里注入的元素还涉及另一个属性——这是为了确保身份提供方使用的模板中的引号是对称的,而且响应是有用的XML:

该请求会在SAML响应中天生以下XML:

现实上,类似的历程也可以用于其他注入点。例如,若是身份提供方在响应的Audience中提供了SAML请求的Issuer字段,则可以使用相关payload(例如以下内容)来注入其他元素。请注重,必须对尖括号(<和>)举行响应的编码处置:

 

该请求将在SAML断言中天生以下Audience元素:

对于用户属性来说,能否乐成地将XML字符注入到SAML断言中,详细取决于身份提供方是若何更新和存储这些属性的;若是XSS防御措施阻止用户在其属性中存储尖括号等字符,则可能无法执行该攻击。在下面的例子中,将用户的名字设置为“Adam< / saml:AttributeValue > < ncc-test > aaaa < / ncc-test > < saml:AttributeValue >”会在断言中发生以下Attribute元素。在这种特殊情形下,有需要关闭saml:AttributeValue元素并确立一个新的AttributeValue元素以通过服务器执行的XML验证:

  

破绽的行使

对于SAML XML注入破绽来说,识别起来那是相当简朴的事情,但要想行使这些破绽的话,可就没有这么容易了。至于破绽能否乐成行使,需要否取决于多种因素,包罗注入点发生的位置,用于签署息争析SAML响应的库对无效XML的容忍度,以及服务提供方是否会信托注入的有用载荷。事实上,纵然可以对某些身份提供方举行XML注入,然则,某些服务提供方仍然可能会拒绝或忽略修改后的有用载荷。之以是泛起这种情形,并不是由于署名无效,而是由于文档泛起了重复的元素所致。

这个破绽的特征将意味着,在许多情形下,有需要注入重复的元素或构建全新的断言。由此导致的问题包罗:

· 服务提供方可能会选择自己确立的原始正当元素(断言或NameID),而不是选择注入的元素。许多XML库在选择文档中重复的元素时,会有差其余显示;通常情形下,这要么是第一次泛起,要么是最后一次泛起。

· 某些有平安意识的服务提供方可能会完全拒绝包罗重复元素的响应;例如,一个断言通常没有充实的理由包罗两个NameID元素。

· 若是服务提供方包罗了针对XML署名封装(XSW)攻击的防御措施,这种攻击也可能失败(有关XML署名封装攻击的详细先容,请参见https://www.ei.ruhr-uni-bochum.de/media/nds/veroeffentlichungen/2012/08/22/BreakingSAML_3.pdf)。这是一种较为常见的SAML破绽:攻击者通过修改SAML响应的结构,试图诱骗服务提供方从一个无署名的元素中读取用户的身份(例如,在SAML响应中具有正当署名断言之前添加第二个未署名断言)。虽然XML注入攻击意味着这两个断言都市包罗在SAML响应署名的局限内,但仅仅是第二个断言元素的存在就足以让一些服务提供方拒绝该新闻。

破绽行使示例

在NCC Group举行的评估中,针对这种破绽的攻击经常泛起在以下两种情形中:

· 属性注入:这种注入破绽通常泛起在身份提供方中与帐户相关的SAML属性中。

· InResponseTo注入:这种注入破绽会影响SAML响应的“InResponseTo”属性。 

下一节提供了针对这两种情形的示例行使。由于篇幅的缘故原由,我们不能能在本文中演示对SAML实现的所有可能的XML注入攻击,因此,希望这些示例能够为读者带来一些启发。现实上,对于这里先容的破绽行使手艺来说,只要稍加刷新,就能用于测试受该破绽影响的大部兼顾份提供方。

免责声明:这些示例是在专门为演示这些破绽行使历程而构建的内陆环境中复现的。

,

USDT场外交易平台

U交所(www.9cx.net)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U交所开放usdt otc API接口、支付回调等接口。

,

属性注入

除了NameID(这是用户的唯一标识符)之外,SAML响应还可以包罗一组对服务提供方有用的用户属性。这些属性是可选的,而且没有特其余要求;通常情形下,它们用于发送用户的姓名、电子邮件地址和电话号码等数据。此外,有些服务提供方还会使用角色属性或类似的属性,以便在通过身份验证后,为用户分配响应的权限。因此,若是这些属性没有被适当地编码,攻击者就可以注入或修改属性来实现提权,或以其他方式获取服务提供方中的敏感数据。 

作为一个例子,假设SAML断言包罗一个AttributeStatement,其中包罗两个属性;一个是用户的全名,另一个是用户的角色(viewer):

那么,攻击者就可以将其在身份提供方中的名称改为如下所示的值:

若是身份提供方在没有经由适当验证的情形下将这个值包罗在name属性中,那么,就会向服务提供方发送以下AttributeStatement。这样的话,攻击者就能够以 “administrator”而非“viewer”的角色举行身份验证:

请注重,属性元素“role”是重复的,因此,若是服务提供方读取了第二个role属性值,或者验证器拒绝了该断言,攻击就有可能失败。若是攻击者控制了两个属性(如姓名和电子邮件地址),就能使用XML注释来有用地删除身份提供方天生的角色属性。接下来,我们以下面的AttributeStatement为例举行演示,其中包罗用户的电子邮件地址、角色和一个名字属性:


其中,role属性包罗在email和name属性之间。因此,攻击者可以将其电子邮件地址和名称设置为以下值:

当身份提供方确立AttributeStatement元素时,将天生以下XML,其中角色属性“viewer”将被包罗在一个XML注释中:

当服务提供方完成剖析后,该用户将在治理员的上下文下对应用程序举行身份验证。

在行使SAML新闻中的XML注入时,注释是一个有用的工具。若是应用适合的话,通常可以借此控制SAML响应或断言的大部门内容,这意味着:攻击者可以行使注释来有用突破服务提供方施加的种种限制。值得注重的是,SAML实现所使用的大多数XML署名方案都市在盘算署名之前对XML文档举行规范化,作为这个历程的一部门,注释会从文档中删除。换句话说,在盘算署名时不会思量SAML响应中的注释,因此可以在提交给服务提供者之前完全删除这些注释。若是有可能将XML注入SAML响应中的两个位置,那么通过使用XML注释,乐成行使该破绽的胜算就会大得多。

InResponseTo与断言注入

当SAML请求ID被危险地包罗在响应中时,就会导致危害InResponseTo属性的注入破绽。如前所述,绝大多数SAML标识提供程序都在响应中反映SAML请求ID的值,因此,这被以为是探测注入破绽时的一个异常可靠的属性。然而,行使这种类型的注入破绽则可能异常难题。主要的缘故原由是这个值包罗在SAML响应中的两个位置;第一个是在响应元素的InResponseTo属性中,第二个是在断言中的SubjectConfirmationData元素的InResponseTo属性中。

下面是受此破绽影响的身份提供方(托管在内陆服务器上)天生的SAML响应示例。可以看到,InResponseTo属性中含有值“_6c4ac3bd08f45c9f34a9230c39ef7e12ede0531e46”,这是服务提供方在SAML请求中设置的:

大多数攻击者的目的是注入一个新的断言,其中包罗一个差其余NameID,从而获得对另一个用户在服务提供方上的账户的接见权。对于下面的有用载荷(为了可读性而举行领会码和花样化),若是想法将其放入发送给身份提供方的SAML请求的ID中时,就可以实现这一目的。

下面,我们对这个有用载荷中的几个元素做些需要的注释:

1. 首先,“>用于从InResponseTo属性中“逃逸”出来,进入XML上下文。

2. 在注入的XML中,包罗了从身份提供方考察到的其他响应中包罗的Issuer和Status元素的副本。

3. 然后,确立一个全新的断言,其中的NameID指定了电子邮件地址“admin@example.org”。这个断言是使用服务器天生的正当响应的断言确立的;NameID字段和NotOnOrAfter属性(指定未来的时间)以及InResponseTo属性都被修改为包罗SAML请求的ID。通过替换这些值,可以确保服务提供方不会拒绝该断言,由于它将期待一个没有过时的断言,而且是为它之前发出的SAML请求天生的。

4. 最后,在末尾处打开一个无关的元素 "elem",而且,该元素含有一个属性。这样做的目的,为了修复由身份提供方确立的Response和SubjectConfirmationData元素在注入点所在的位置留下的悬空符号。但请注重,这一步是可选的,其需要性取决于XML剖析器的容忍度:若是悬空符号不是元素的一部门,一些剖析器将拒绝XML文档,而另一些剖析器将简朴地将悬空符号视为分外的文本节点。若是服务器拒绝没有这个元素的有用载荷,请实验在另一个SAML请求中包罗它。

下面的SAML请求包罗了这个有用载荷,并为传输举行了编码处置:

身份提供方收到此新闻后,将天生以下SAML响应。 注入的XML已以粗体突出显示,然则请注重,在身份提供方插入XML署名时已对XML举行了响应的调整:

需要注重的是,由于存在两个注入点,因此这个SAML响应将包罗三个断言,一个是使用XML注入有用载荷注入的,第二个是由身份提供方天生的(使用正当的NameID,即user@example.org ),另有一个注入的断言嵌入在正当的断言中(在第二个InResponseTo属性的位置)。如前所述,对这种SAML响应的处置将取决于服务提供方的设置。在我们所举行的测试中,易受攻击的身份提供方毗邻到一个SimpleSAMLphp安装;该安装接受了SAML响应,并使用第一次泛起的断言来验证用户的身份,这意味着攻击者是在admin@example.org的上下文中登录服务的。

若是服务提供方使用第二个断言而不是第一个断言,或者由于重复泛起的断言而拒绝响应,则可以再次行使XML注释来有用地从响应中删除身份提供方的断言。在我们举行的测试中,有两种方式被乐成使用。对于第一种方式:若是服务提供方使用的XML剖析器不是异常严酷的话,则只需在有用载荷的末尾留下一个没有终止的注释即可。身份提供方可能会忽略该注释尚未竣事的情形,并仅使用攻击者的断言为响应天生署名。下面给出了一个可以实现这一目的的有用载荷的示例(为便于阅读,已举行领会码和花样化):

当身份提供方天生SAML响应时,“<!–”字符串后面的内容将被忽略,从而有用地删除了身份提供方的断言以及反映第二个InResponseTo插入点的第二个断言。

然则,某些身份提供方将拒绝该有用负载,由于XML无效且带有未终止的注释。为了绕过这种限制,可以使用如下所示的有用载荷(同样,为了便于阅读,这里举行了响应的解码和花样化处置):

该有用载荷行使了这样一个事实,即在身份提供方天生的SAML响应中,内容会重复两次。其中,注释和CDATA块的组适用于关闭身份提供方的断言,并注入新的断言。有用载荷可以剖析为以下几个部门:

1. 首先,第一个InResponseTo属性中使用引号举行转义,然后确立一个新的属性‘ncc-injection’。这个属性的值使用的是单引号,这样就可以保留注入断言的XML中的双引号。

2. 属性值内的有用载荷包罗一个竣事注释字符串“–>”,后面是恶意断言XML。这与之前的有用载荷类似,但止于SubjectConfirmationData元素,由于这是第二个InResponseTo属性泛起的地方。

3. 在断言XML之后,属性值包罗用于打开CDATA块的字符串。

4. 然后,通过单引号和尖括号来关闭ncc-injection属性和Response元素。

5. “<!–”字符串用于打开一个新的注释;这个注释将包罗身份提供方的断言。

6. 然后是一个“]]>”字符串,以关闭CDATA块。

7. 最后,提供一个新的元素“ncc-elem”,而且该元素需要带有一个属性;这样做,是为了呼应身份提供方确立的InResponseTo属性留下的引号字符。(注重:同样,这个元素可能不是必须的,详细取决于XML剖析器的实现情形)。

当被易受攻击的身份提供方处置时,会天生以下XML。请注重,第一个注入的断言,由于是在“samlp:Response”“ncc-injection”属性中关闭的,以是并不会被激活。同时,注释关闭了身份提供方断言的第一部门,其中指定了用户名“user@example.org”。然后,当在身份提供方的断言的第二个InResponseTo属性中重复有用载荷时,“->”字符串将会关闭注释,从而将恶意XML释放出来。该恶意XML竣事于SubjectConfirmationData元素(CDATA块最先的位置)处;这个CDATA块被设计成关闭第二个注释字符串“<!-”,以防止断言/响应XML的剩余部门被注释掉。最后,“ncc-elem”元素用于实现引号的配对,而身份提供方断言模板的其余部门则关闭XML,从而确立一个有用的SAML响应:

凭证InResponseTo属性在XML文档中的位置,有时需要调整有用载荷,以确保XML及其花样准确无误。

然则,对于InResponseTo注入破绽的行使来说,照样有些事情需要举行说明。这个特殊的注入攻击之以是乐成,完全是由于SAML响应中的断言没有举行署名。不外,一些身份提供方会同时对断言和SAML响应举行署名。在这种情形下,仅可能行使第二个InResponseTo注入点,由于在举行署名后,对此断言的任何修改都可能导致验证失败。因此,这个行使方式的细节,会因身份提供方的实现以及用于剖析和署名XML的库而有所差异。

小结

依赖SAML举行身份验证的组织和服务,应仔细检查身份提供方,并确定它们是否受到XML注入破绽的影响,稀奇是若是身份提供方使用基于字符串的模板来构建含有用户控制数据的SAML响应/断言。在理想的情形下,应该使用适当的XML库来组织SAML响应和断言,而这些库应该能够平安地在属性和文本节点中设置受用户控制的数据。

若是绝对有需要使用字符串模板或字符串函数在SAML新闻中包罗受用户控制的数据,则应严酷验证数据的正当性。若是在用户输入中检测到XML字符,则应使用错误新闻拒绝身份验证实验。在插入文档之前,应将XML编码应用于数据,以确保纵然绕过了验证,用户输入也无法注入其他XML。 

此外,若是可能的话,请思量对服务提供方发送的SAML身份验证请求强制使用署名。若是身份提供方对SAML请求署名举行验证,就能检测到任何通过修改请求以包罗XML注入有用负载的实验(例如行使InResponseTo属性的实验)。

本文翻译自:https://research.nccgroup.com/2021/03/29/saml-xml-injection/: 萍乡城事网声明:该文看法仅代表作者自己,与萍乡城事网无关。转载请注明:usdt自动api接口(www.caibao.it):深入考察SAML XML注入破绽
发布评论

分享到:

欧博亚洲app下载:想着一个人的名字选一枚婚戒,测TA心里爱着你吗!
1 条回复
  1. 皇冠代理手机端(www.22223388.com)
    皇冠代理手机端(www.22223388.com)
    (2021-09-30 00:02:26) 1#

    USDT场外交易www.Uotc.vip)是使用TRC-20协议的Usdt官方交易所,开放USDT帐号注册、usdt小额交易、usdt线下现金交易、usdt实名不实名交易、usdt场外担保交易的平台。免费提供场外usdt承兑、低价usdt渠道、Usdt提币免手续费、Usdt交易免手续费。U担保开放usdt otc API接口、支付回调等接口。

    期待期待,听说很好

发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。