Hacktoberfest 2026: những issue maintainer đã đánh dấu cho tháng Mười, đang mở và phù hợp người mới. Xem issue Hacktoberfest

Heap OOB read in parse_ad_cdp: cc_count not bounded by packet length

Đang mở Phù hợp với người mới
#2,425 1 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

@Nikhil-jaiswal007 đang làm issue này rồi.

Từ ngày 25/10/2026.

Đánh giá

Độ khó
2/5
Thời gian dự kiến
1-3 giờ
Mức phù hợp với người mới
78/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
c
Lĩnh vực
backend, security

Hướng nghiên cứu

Bắt đầu tại src/lib_ccx/ccx_gxf.c, ở parse_ad_cdp (khoảng dòng 558), và theo dõi cách len, cdp_length và cc_count mô tả số byte còn lại của gói. Kiểm tra xem dữ liệu phụ đề được khai báo có vừa trước khi sao chép hay không, sau đó build với ASan và đưa PoC 16 byte được cung cấp qua trình phân tích cú pháp GXF. Hoàn tất khi đầu vào bị từ chối an toàn mà không xảy ra thao tác đọc vượt giới hạn.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

CCExtractor version: master HEAD

Bug

parse_ad_cdp in src/lib_ccx/ccx_gxf.c (line 558) reads cc_count from the CDP payload byte (5-bit field, max 31) and copies cc_count * 3 bytes starting at offset 9 without checking that those bytes fit within len.

cc_count = *cdp++ & 0x1f;          // line 558, attacker-controlled, up to 31

for (int i = 0; i < cc_count * 3; i++)   // line 560
{
    data->buffer[data->len + i] = cdp[i]; // reads past cdp allocation
}

The header validation at line 494 only checks len < 11. A 16-byte packet passes that check but with cc_count = 23 the loop reads 69 bytes starting at offset 9, going 60 bytes past the end of the buffer.

The cdp_length check at line 512 (cdp_length != len) validates that the declared length matches the buffer, but cc_count is never validated against cdp_length.

Impact

Heap out-of-bounds read. The OOB bytes are copied into data->buffer, so heap contents can leak into subtitle output.

Reached via: ccextractor untrusted.gxf -- a GXF ancillary-data packet with DID 0x61 / SDID 0x01 routes through parse_ad_pyld to parse_ad_cdp (line 656).

PoC

16-byte input (base64):

lmkQQEAAAXJ3OHt9dAABAA==

Hex: 96 69 10 40 40 00 01 72 77 38 7b 7d 74 00 01 00

Build with ASan, feed through the GXF parser. ASan reports heap-buffer-overflow READ at cdp[i].

Found with AI-assisted fuzzing.

Suggested fix

Check that the caption data section fits in the remaining packet before reading:

cc_count = *cdp++ & 0x1f;
if (cc_count * 3 > (len - (cdp - (cdp_start))))
{
    log("cc_count %d exceeds remaining CDP length\n", cc_count);
    return CCX_EINVAL;
}

Where cdp_start is the original cdp pointer saved at entry.

Ngôn ngữ chính
C
Star
908
Fork
595
Merge trung bình
3 ngày 6 giờ
Pull request đã merge (30 ngày)
31

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của CCExtractor/ccextractor

Tất cả issue của CCExtractor/ccextractor

Issue tương tự

Thêm issue về C

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.