ppp EAP frame больше 271 - PullRequest
       70

ppp EAP frame больше 271

0 голосов
/ 24 февраля 2020

возможно ли иметь len> 271

Как здесь, я вызвал условие вручную, но я сомневаюсь, что вы можете отправить пакет с len> 271, т.е. 274

Может кто-нибудь объяснить это переполнение на основе знаний EAP?

        len--;
        //len=274;
        if (vallen != 16 || vallen > len) {
            error("EAP: MD5-Response with bad length %d", vallen);
            eap_figure_next_state(esp, 1);
            break;
        }

        dbglog("rhost:%s vallen:%d len:%d", rhostname, vallen, len);

        /* Not so likely to happen. */
        if (vallen >= len + sizeof (rhostname)) {
            dbglog("EAP: trimming really long peer name down");
            BCOPY(inp + vallen, rhostname, sizeof (rhostname) - 1);
            rhostname[sizeof (rhostname) - 1] = '\0';
        } else {
            BCOPY(inp + vallen, rhostname, len - vallen);
            rhostname[len - vallen] = '\0';
        }

Источник (исправлен):

https://github.com/paulusmack/ppp/commit/8d7970b8f3db727fe798b65f3377fe6787575426

rhost: vallen:16 len:274
*** buffer overflow detected ***: pppd terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7fea131337e5]
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x5c)[0x7fea131d515c]
/lib/x86_64-linux-gnu/libc.so.6(+0x117160)[0x7fea131d3160]
pppd[0x42a858]
pppd(main+0x95f)[0x40981f]
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xf0)[0x7fea130dc830]
pppd(_start+0x29)[0x409db9]
======= Memory map: ========
00400000-00448000 r-xp 00000000 fd:01 11540966                           /usr/sbin/pppd
00648000-00649000 r--p 00048000 fd:01 11540966                           /usr/sbin/pppd
00649000-0064f000 rw-p 00049000 fd:01 11540966                           /usr/sbin/pppd
0064f000-0069b000 rw-p 00000000 00:00 0
01c7b000-01c9c000 rw-p 00000000 00:00 0 

Более подробная информация здесь:

https://github.com/marcinguy/CVE-2020-8597/blob/master/README.md

...