SEGV has occurred in function cJSONUtils_ApplyPatchesCaseSensitive at cJSON_Utils.c
まだ誰も着手していません。
評価
調査の方向性
cJSON_Utils.c の cJSONUtils_ApplyPatchesCaseSensitive から始め、次に ASan トレースで名前が示されている apply_patch と detach_path のフレームを追ってください。clang と AddressSanitizer を使って最小限の C リプロデューサーを構築し、リンクされた POC に対して実行して、入力によって報告された SEGV または DoS の状態が引き起こされなくなったことを確認してください。
索引モデルが issue の本文から書いたものです。
説明
Description
SEGV has occurred in function cJSONUtils_ApplyPatchesCaseSensitive at cJSON_Utils.c:1085
Version
commit c859b25da02955fef659d658b8f324b5cde87be3 (HEAD -> master, tag: v1.7.19, origin/master, origin/HEAD)
Author: Alan Wang <[email protected]>
Date: Tue Sep 9 21:56:10 2025 +0800
Release 1.7.19 (#958)
Steps to reproduce
The Crash can be reproduced with the following minimal c code
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "cJSON.h"
#include "cJSON_Utils.h"
int main(int argc, char** argv) {
if (argc < 2) return 0;
unsigned char* data = NULL;
size_t size = 0;
FILE* fp = fopen(argv[1], "rb");
if (!fp) return 0;
fseek(fp, 0, SEEK_END);
size = ftell(fp);
fseek(fp, 0, SEEK_SET);
data = (unsigned char*)malloc(size + 1);
if (!data) { fclose(fp); return 0; }
if (fread(data, 1, size, fp) != size) { free(data); fclose(fp); return 0; }
data[size] = '\0';
fclose(fp);
cJSON* obj_1 = cJSON_CreateObject();
cJSON* obj_2 = cJSON_Parse(data);
if (obj_1 && obj_2) {
cJSONUtils_ApplyPatchesCaseSensitive(obj_1, obj_2);
}
if (obj_1) cJSON_Delete(obj_1);
if (obj_2) cJSON_Delete(obj_2);
free(data);
return 0;
}
$ https://github.com/DaveGamble/cJSON; cd cJSON.
$ clang -fsanitize=address -O0 -g -o minimize ./minimize.c cJSON.c cJSON_Utils.c
$ ./minimize poc-ApplyPatchesCaseSensitive-SEGV
=================================================================
==544063==ERROR: AddressSanitizer: SEGV on unknown address 0x000000000000 (pc 0x757b239b213c bp 0x7ffc00685a30 sp 0x7ffc006851e8 T0)
==544063==The signal is caused by a READ memory access.
==544063==Hint: address points to the zero page.
#0 0x757b239b213c string/../sysdeps/x86_64/multiarch/strlen-evex.S:77
#1 0x5584c61d7489 in strlen (/Data/du4t/harnessGeneration/testcase/cJSON/5-CVE+0x36489) (BuildId: 675a8db95ab4b2105e92973333a1dd1eccdabf1b)
#2 0x5584c629b059 in cJSONUtils_strdup /cJSON/cJSON_Utils.c:71:14
#3 0x5584c629b059 in detach_path /cJSON/cJSON_Utils.c:438:22
#4 0x5584c62973db in apply_patch /cJSON/cJSON_Utils.c:918:21
#5 0x5584c6297e3f in cJSONUtils_ApplyPatchesCaseSensitive /cJSON/cJSON_Utils.c:1085:18
#6 0x5584c62800d0 in main cJSON/minimize.c:30:9
#7 0x757b23829d8f in __libc_start_call_main csu/../sysdeps/nptl/libc_start_call_main.h:58:16
#8 0x757b23829e3f in __libc_start_main csu/../csu/libc-start.c:392:3
#9 0x5584c61c0414 in _start (/cJSON/5+0x1f414) (BuildId: 675a8db95ab4b2105e92973333a1dd1eccdabf1b)
POC
https://github.com/Du4t/POC/blob/main/cJSON/poc-ApplyPatchesCaseSensitive-SEGV
Impact
Potentially causing DoS
- 主要言語
- C
- スター
- 13k
- フォーク
- 3.5k
- PR マージ指標
- 30日以内にマージされた PR はありません
環境構築
- Dockerfile・Docker Compose ファイルなし
- プルリクエストのテンプレートなし
- コントリビューションガイドを読む
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
DaveGamble/cJSON のほかの issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 86/100
DaveGamble/cJSON#1094 · リアクション 1 件 ·
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
DaveGamble/cJSON#1093 ·
-
Use-after-free in cJSONUtils_ApplyPatches when a patch removes the patch array対応中かも @iliasabk が 23 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
DaveGamble/cJSON#1082 ·
-
Use-after-free in cJSON_ReplaceItemInObject when the key is the item's own name対応中かも @iliasabk が 24 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 82/100
DaveGamble/cJSON#1081 ·
-
buffer_skip_whitespace accepts every byte below 0x21 as whitespace対応中かも @AetherAI3 が 35 日前に担当しました。 オープン
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
DaveGamble/cJSON#1074 ·
DaveGamble/cJSON の issue をすべて見る
似ている issue
-
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
KalicoCrew/kalico#1012 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 2/5 1〜3時間 初心者へのやさしさ 79/100
joncampbell123/dosbox-x#6664 ·
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 66/100
メンテナーはふだん 1 日以内に返信
-
bug good first issue please retest
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
eclipse-tinydtls/tinydtls#298 · コメント 2 件 ·
メンテナーはふだん 2 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 75/100