Thread (3 messages) flat view 3 messages, 3 authors, 2016-03-17

Re: Re: [PATCH V7] netfilter: h323: avoid potential attack

From: Zhouyi Zhou <hidden>
Date: 2016-03-17 06:50:15
Also in: lkml, netfilter-devel

Thanks Pablo for reviewing
From: "Pablo Neira Ayuso" <pablo@netfilter.org>
Sent Time: Saturday, March 12, 2016
To: "Zhouyi Zhou" <redacted>
On Sun, Feb 21, 2016 at 12:03:59AM +0800, Zhouyi Zhou wrote:
quoted
I think hackers chould build a malicious h323 packet to overflow
(iph->ihl * 4 + th->doff * 4);
You cannot trust the information that is available in the header. If
this is bogus this check will be defeated. That's why we pass this
protoff parameters to each function.
The length of IP header is checked in the function nf_conntrack_in which calls
get_l4proto hook to detect bogus ip header. 
There is no where in the call stack to the function set_addr to check bogus
TCP header, and my code does the job:
+		th = (void *)iph + iph->ihl * 4;
+		datalen = skb->len - (iph->ihl * 4 + th->doff * 4);
+		/* check offset overflow */
+		if (addroff > datalen)
+			return  -1;
if th->doff be too big addroff will greater than datalen.
You also refer to get_h225_addr() in your description. That function
always copies 4 or 16 bytes, so I would appreciate if you can describe
the possible issue further.
The problem of get_h225_addr lies in bogus taddr->ipAddress.ip, if this value
is too big, it may make the pointer p point to no exist address.
(gdb) list 686
681                       struct h323_ct_state *ctstate)
682     {
683             const unsigned char *p;
684             int len;
685
686             switch (taddr->choice) {
687             case eTransportAddress_ipAddress:
688                     if (nf_ct_l3num(ct) != AF_INET)
689                             return 0;
690                     p = data + taddr->ipAddress.ip;

Thanks for your time and effort
Cheers
Zhouyi
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help