[하루한줄] CVE-2022-27666: Exploit esp6 modules in Linux kernel
URL
Exploit esp6 modules in Linux kernel
Target
Ubuntu Desktop 21.10
Explain
CVE-2022-27666는 Linux의 esp6 암호화 모듈에서 발견된 취약점입니다.
8-page 크기의 버퍼에 8-page 보다 큰 유저 메시지를 전달할 수 있기 때문에 취약점 buffer overflow가 발생합니다.
bool skb_page_frag_refill(unsigned int sz, struct page_frag *pfrag, gfp_t gfp)
{
if (pfrag->offset + sz <= pfrag->size)
return true;
...
if (SKB_FRAG_PAGE_ORDER &&
!static_branch_unlikely(&net_high_order_alloc_disable_key)) {
pfrag->page = alloc_pages((gfp & ~__GFP_DIRECT_RECLAIM) |
__GFP_COMP | __GFP_NOWARN |
__GFP_NORETRY,
SKB_FRAG_PAGE_ORDER);
...
}
...
return false;
}
위 코드는 최대 8-page 크기의 버퍼를 할당하는 함수 skb_page_frag_refill()
입니다.
static int null_skcipher_crypt(struct skcipher_request *req)
{
struct skcipher_walk walk;
int err;
err = skcipher_walk_virt(&walk, req, false);
while (walk.nbytes) {
if (walk.src.virt.addr != walk.dst.virt.addr)
// out-of-bounds write
memcpy(walk.dst.virt.addr, walk.src.virt.addr,
walk.nbytes);
err = skcipher_walk_done(&walk, 0);
}
return err;
}
위는 함수 null_skcipher_crypt()
의 코드입니다. memcpy()
를 통해 8-page 버퍼에 8-page 보다 많은 데이터를 복사할 수 있습니다.
본 글은 CC BY-SA 4.0 라이선스로 배포됩니다. 공유 또는 변경 시 반드시 출처를 남겨주시기 바랍니다.