USDT自动充值接口

菜宝钱包(caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

2020年10月,我们收到了一份针对ISC BIND服务器的匿名平安讲述。在这份讲述中发现的平安问题,现实上基于之前曝出的破绽CVE-2006-5989,该破绽影响Apache模块mod_auth_kerb,而且,它最初也是由匿名研究职员发现的。ISC BIND服务器SPNEGO(the Simple and Protected GSSAPI Negotiation Mechani *** ,SPNEGO)组件内共享了含有该破绽的代码,但ISC那时并没有合并响应的平安补丁。15年后,ISC对BIND中的这个破绽举行了修复,并为其分配了响应的破绽编号,即CVE-2020-8625。

对于BIND服务器来说,从9.11到9.16的版本都受到该破绽的影响。而且,攻击者可以在无需身份验证的情形下远程触发该破绽,进而导致一个4字节的堆溢出。这份平安讲述的内容相符Targeting Incentive Program的要求,但缺乏获得全额奖金所需的完整exploit。不外,这仍然不失为一个优异的平安讲述,而且这个破绽也值得我们深入举行研究。 

破绽剖析

该破绽的成因,是位于lib/dns/spnego.c中的函数der_get_oid()存在堆溢露马脚。

static int
der_get_oid(const unsigned char *p, size_t len, oid *data, size_t *size) {
// ...
data->components = malloc(len * sizeof(*data->components));   // components == NULL) {
      return (ENOMEM);
    }
    data->components[0] = (*p) / 40;    // components[1] = (*p) % 40;
    --len;               //  0U; ++n) {
        unsigned u = 0;
 
        do {
            --len;
            u = u * 128 + (*p++ % 128);
        } while (len > 0U && p[-1] & 0x80);
        data->components[n] = u;      // <-- (4)
    }
// ...
}

这个函数在(1)处分配一个数组缓冲区。变量len用于跟踪缓冲区中剩余的元素数目。同时,代码在(2)处对前2个元素举行了填充处置,然则,它在(3)处只将len减去了1。因此,循环(4)可以使缓冲区溢出1个元素。data->components的类型是int,以是,这将导致4字节的堆溢出。

触发机制 

由于该破绽存在于SPNEGO组件中,因此,必须在BIND中对TKEY-GSSAPI举行响应的设置。

, cat /etc/bind/named.conf.options
options {
    directory "/var/cache/bind";
    tkey-gssapi-keytab "/etc/bind/dns.keytab";
};
 
, cat /etc/bind/named.conf.local
zone "example.nil." IN {
    type master;
    file "/etc/bind/example.nil.db";
};

其中,dns.keytab文件位于bin/tests/system/tsiggss/ns1/中,而example.nil.db文件则是由剧本bin/tests/system/tsiggss/setup.sh天生的。

现在,响应的测试环境已经准备好了。当吸收到一个手工请求时,该破绽就会被触发,并发生以下挪用栈:

,0  der_get_oid at spnego.c:841
,1  decode_oid at spnego.c:1054
,2  decode_MechType at spnego_asn1.c:213
,3  decode_MechTypeList at spnego_asn1.c:290
,4  decode_NegTokenInit at spnego_asn1.c:523
,5  gss_accept_sec_context_spnego at spnego.c:591
,6  dst_gssapi_acceptctx at gssapictx.c:729
,7  process_gsstkey at tkey.c:551
,8  dns_tkey_processquery at tkey.c:882
,9  ns_query_start at query.c:11315
,10 ns__client_request at client.c:2161
,11 proces *** uffer at tcpdns.c:227
,12 dnslisten_readcb at tcpdns.c:294
,13 read_cb at tcp.c:814
...

破绽行使 

这个破绽的可行使性高度依赖于glibc的版本,而下面的注释是基于Ubuntu18.04和glibc2.27的,后者支持tcache。

首先,我们要确定这个溢露马脚所能控制的内容:

· 在der_get_oid()中分配的易受攻击的缓冲区的巨细和内容是可控的。顺便说一下,当当前请求完成后,该缓冲区将被释放。

· decode_MechTypeList()中有一个while循环,用于重复执行der_get_oid()函数,而且循环次数也是可控的。

,

usdt收款平台

菜宝钱包(www.caibao.it)是使用TRC-20协议的Usdt第三方支付平台,Usdt收款平台、Usdt自动充提平台、usdt跑分平台。免费提供入金通道、Usdt钱包支付接口、Usdt自动充值接口、Usdt无需实名寄售回收。菜宝Usdt钱包一键生成Usdt钱包、一键调用API接口、一键无实名出售Usdt。

,

有了这两点,我们就可以轻松地操作堆了。为了准备堆,我们可以耗尽随便巨细的tcache bins,并在请求完成后重新对其举行填充。同时,重新填充的分块(chunk)在内存中可以是延续的。这使得内存结构相当有利于通过缓冲区溢出发动攻击。 

实现随便写原语

在这个阶段,通过滥用tcache空闲列表可轻松实现随便写原语。

1. 触发一个4字节的溢出来扩展下一个空闲的chunk巨细。

2. 在下一个请求中,在受损的chunk中分配内存空间。当请求竣事时,它将被移动到新的tcache bin中。

3. 用新的巨细再次分配受损的chunk。这时,受损的chunk将与下一个空闲的chunk发生重叠,然后,用一个随便的值笼罩其freelist。

4. 从“中毒的”tcache freelist上分配内存空间。它将返回一个随便地址。

泄露内存地址

默认情形下,会为BIND启用所有Linux缓解措施。因此,我们首先要搞定ASLR,这意味着我们需要找到一种从内存中泄露地址的方式。一个可能实现内存泄露的时机,是行使code_NegTokenArg()函数。该函数用于将响应新闻编码到一个缓冲区中,并将其发送给客户端。

static OM_uint32
code_NegTokenArg(OM_uint32 *minor_status, const NegTokenResp *resp,
                 unsigned char **outbuf, size_t *outbuf_size) {
// ...
    buf_size = 1024;
    buf = malloc(buf_size);    // <-- (5)
//...
    do {
        ret = encode_NegTokenResp(buf + buf_size - 1, buf_size, resp,
                                  &buf_len);
// ...
    } while (ret == ASN1_OVERFLOW);
 
    *outbuf = malloc(buf_len);    // <-- (6)
    if (*outbuf == NULL) {
        *minor_status = ENOMEM;
        free(buf);
        return (GSS_S_FAILURE);
    }
    memmove(*outbuf, buf + buf_size - buf_len, buf_len);
    *outbuf_size = buf_len;
 
    free(buf);       // <-- (7)
 
    return (GSS_S_COMPLETE);
}

位于(5)处的buf是一个暂且缓冲区,它的初始巨细是1024字节,正幸亏tcache处置的局限内。而(6)处的outbuf是将被发送到客户端的缓冲区,其巨细也在tcache的局限内。若是可以对这两个缓冲区的巨细举行tcache dup攻击,那么,在(5)和(6)处的两次malloc()挪用将返回相同的地址。在执行(7)处的free()函数之后,一个tcache->next指针将被更新到buf中,然则,这时它已经和outbuf重叠在一起了。这意味着堆指针将泄露给客户端。

理想情形下,位于(6)处的buf_len应该选择得足够大,以阻止滋扰较小的tcache bins。不幸的是,更大值似乎只有96个字节。由于这个问题,历程基本无法存活,并在客户端获得泄露的堆指针后不久就会溃逃。因此,我们需要举行更深入的研究,以便来找到一种可以充实行使该破绽的方式。

破绽的修复

在BIND 9.16.12和BIND 9.11.28中,已经修复了该破绽。为了修复BIND 9.16,ISC完全放弃了SPNEGO的使用。在BIND 9.11中,他们针对原始问题应用了补丁程序。

小结 

这个平安破绽解释,纵然软件是开源的,而且获得了普遍使用,破绽也会存在多年而难以被发现。软件维护职员需要亲热监视他们使用的所有外部模块,以确保应用了最新的平安补丁。同时,该破绽也解释这是一个异常棘手的挑战。ISC BIND是Internet上最盛行的DNS服务器,以是,该破绽的影响局限相当大,稀奇是该破绽可以在远程且无需身份验证的情形下触发。我们建议人人尽快更新响应的DNS服务器。

本文翻译自:https://www.thezdi.com/blog/2021/2/24/cve-2020-8625-a-fifteen-year-old-rce-bug-returns-in-isc-bind-server: Allbet Gaming声明:该文看法仅代表作者自己,与www.allbetgame.us无关。转载请注明:usdt不用实名交易(www.caibao.it):深入剖析在ISC BIND服务器中潜藏了15年的RCE破绽
发布评论

分享到:

怎么购买usdt(www.caibao.it):为什么现在欧冠的场所越来越高?若何看待孙杨停职八年?对孙杨和中国游泳会有什么影响?欧洲杯和欧冠有什么差其余鉴别?中超直播都发端收费了,你会付费看吗?若何评价《青春有你2》第一位退役选手李伯伯?智能电视上用什么软件看重超直播对比好?
你是第一个吃螃蟹的人
发表评论

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