1. CVE-2021-45960
Reference: https://github.com/libexpat/libexpat/issues/531
libexpat은 C로 작성된 XML parser이다. lib/xmlparse.c/storeAtts
함수의 취약점이며 조작된 XML 파일을 input으로 했을 때 발생한다. 29bit 이상의 값에서 left shfit를 할 경우 너무 작은 크기를 할당하거나, 메모리를 free 시키는 등의 의도하지 않은 작업을 수행하게 된다. 31bit보다 큰 값에서 signed int에 대한 left shift(<<)를 할 때, sizeof(int)==4
라면 예상되지 않은 결과가 나올 수 있다.
int nsAttsSize = (int)1 << parser->m_nsAttsPower;
[..]
nsAttsSize = (int)1 << parser->m_nsAttsPower;
[..]
temp = (NS_ATT *)REALLOC(parser, parser->m_nsAtts,
nsAttsSize * sizeof(NS_ATT));
nsAttSize*sizeof(NS_ATT)
이 계산을 할 때 sizeof
는 머신의 아키텍처에 따라 다른 값을 나타낸다. ntAttSize
는 m_nsAttsPower
값에 의해 결정되고, m_nsAttsPower
값은 input으로 사용되는 XML의 단일 태그의 접두사 속성의 개수에 의해 결정된다.
m_nsAttsPower
의 계산식은 m_nsAttsPower := int(math.log2(attsCount - 1)) + 2
이다. 속성의 개수가 여기서 사용되며, 따라서 m_nsAttsPower
가 29이려면 2^(29-2)+1
의 attsCount
값을 가져야 한다.
| x86 (32bit int and size_t) | amd64 (32bit int, 64bit size_t)
------------------+------------------------------------+---------------------------------
m_nsAttsPower 29 | (size_t)(1 << 29) * (4+4+4) | (size_t)(1 << 29) * (8+8+8)
| => 2_147_483_648, mult overflow | >= 12_884_901_888
| => allocating too few bytes | => mallocs okay or returns NULL
| |
m_nsAttsPower 30 | (size_t)(1 << 30) * (4+4+4) | (size_t)(1 << 30) * (8+8+8)
| => 0, mult overflow | => 25_769_803_776
| => realloc acts as free | => mallocs okay or returns NULL
| |
m_nsAttsPower 31 | (size_t)(1 << 31) * (4+4+4) | (size_t)(1 << 31) * (8+8+8)
| => undefined behavior | => undefined behavior
| |
m_nsAttsPower
≤ 28 :m_nsAttsPower
== 29 : 32bit에서는 너무 작은 크기의 할당, 64bit에서는 문제 없음m_nsAttsPower
== 30 : 32bit에서는 0 할당 즉 free, 64bit에서는 문제 없음m_nsAttsPower
≥ 31 : 32/64bit 모두에서 예측할 수 없는 결과(ex: DoS)
2. CVE-2021-34423
Reference: https://bugs.chromium.org/p/project-zero/issues/detail?id=2223
zoom buffer overflow
3. CVE-2021-34424
Reference: https://bugs.chromium.org/p/project-zero/issues/detail?id=2235
zoom info leak
'깔짝할짝' 카테고리의 다른 글
2022-01-09 Sun (0) | 2022.01.10 |
---|---|
2022-01-07 Fri (0) | 2022.01.07 |
2021-01-05 Wed (0) | 2022.01.05 |
2022-01-04 Tue (0) | 2022.01.04 |
2021-01-02 Sun (0) | 2022.01.02 |