Jogosultságkiterjesztésre alkalmas hibát javítottak a sudo-ban. A probléma a távoli felhasználókhoz rendelt hálózati tartományok helytelen kezeléséből, egész konkrétan egy kifelejtett break kifejezésből adódik:
switch (family) {
case AF_INET:
if (ifp->addr.ip4.s_addr == addr.ip4.s_addr ||
(ifp->addr.ip4.s_addr & ifp->netmask.ip4.s_addr)
== addr.ip4.s_addr)
debug_return_bool(true);
break; # Ez bizony kimaradt...
#ifdef HAVE_STRUCT_IN6_ADDR
case AF_INET6:
if (memcmp(ifp->addr.ip6.s6_addr, addr.ip6.s6_addr,
sizeof(addr.ip6.s6_addr)) == 0)
debug_return_bool(true);
for (j = 0; j < sizeof(addr.ip6.s6_addr); j++) {
if ((ifp->addr.ip6.s6_addr[j] & ifp->netmask.ip6.s6_addr[j]) != addr.ip6.s6_addr[j])
break;
}
if (j == sizeof(addr.ip6.s6_addr))
debug_return_bool(true);
break;
#endif /* HAVE_STRUCT_IN6_ADDR */
}
A hiba következtében IPv4-es címek esetén a hálózati maszkok ellenőrzésekor a végrehajtás tovább halad az IPv6 ágra, ha az IPv4 maszk illesztése nem sikerült. Mivel azonban ebben az esetben az IPv6-os változók inicializálatlanok, az összehasonlítás végül sikerrel végződik, vagyis olyan felhasználónak is megadatik az emelt jogosultság, aki nem a konfigurációban megadott hálózatból érkezett.
Többek között ezért kell jól odafigyelni, hogy mindig kiírjuk azokat a fránya breakeket.
synapse · http://www.synsecblog.com 2012.05.21. 13:04:22
hillaby · http://twitter.com/hillaby 2012.05.22. 09:26:55
buherator · http://buhera.blog.hu 2012.05.22. 10:22:30