ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [2025-01-02] MongoBleed ์ทจ์•ฝ์ 
    News 2026. 1. 2. 12:56

     

    ๐Ÿ”—News Link:

    https://m.boannews.com/html/detail.html?mtype=1&idx=141194

     

    ์œ ๋น„์†Œํ”„ํŠธ, ์‚ฌ์ƒ ์ตœ์•… ๋ณด์•ˆ์ฐธ์‚ฌ... ‘๋ ˆ์ธ๋ณด์šฐ ์‹์Šค ์‹œ์ฆˆ’ ํ†ต์ œ๊ถŒ ์ผ์‹œ ์ƒ์‹ค

    ํ”„๋ž‘์Šค์— ๋ณธ์‚ฌ๋ฅผ ๋‘” ์„ธ๊ณ„์ ์ธ ๋น„๋””์˜ค ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์—…์ฒด ์œ ๋น„์†Œํ”„ํŠธ์˜ ๋Œ€ํ‘œ์ž‘ ‘๋ ˆ์ธ๋ณด์šฐ ์‹์Šค ์‹œ์ฆˆ’ ๊ฐ€ ํ•ด์ปค ๊ทธ๋ฃน์˜ ๊ณต๊ฒฉ์„ ๋ฐ›์•„ ์„œ๋ฒ„ ํ†ต์ œ๊ถŒ์„ ์ผ์‹œ์ ์œผ๋กœ ์ƒ์‹คํ•˜๋Š” ์ดˆ์œ ์˜ ์‚ฌํƒœ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค. ‘

    m.boannews.com

     

    2025๋…„ 12์›” 28์ผ, ํ”„๋ž‘์Šค์— ๋ณธ์‚ฌ๋ฅผ ๋‘” ์„ธ๊ณ„์  ๊ฒŒ์ž„ ๊ฐœ๋ฐœ์‚ฌ ์œ ๋น„์†Œํ”„ํŠธ์˜ ๋Œ€ํ‘œ์ž‘ ‘๋ ˆ์ธ๋ณด์šฐ ์‹์Šค ์‹œ์ฆˆ’  ์˜ ์„œ๋ฒ„ ํ†ต์ œ๊ถŒ์ด ํ•ด์ปค ๊ทธ๋ฃน์— ์˜ํ•ด ์ผ์‹œ์ ์œผ๋กœ ์žฅ์•…๋˜์—ˆ๋‹ค.

    ๊ณต๊ฒฉ ์ฃผ์ฒด๋Š” ‘ํผ์ŠคํŠธ ๊ทธ๋ฃน’(First Group)์ด๋ž€ ์ด๋ฆ„์˜ ํ•ด์ปค ์ง‘๋‹จ์œผ๋กœ, ๊ฒŒ์ž„ ๋‚ด ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์„ ์–ป์–ด ์‹œ์Šคํ…œ ๊ณต์ง€์ฐฝ์„ ์žฅ์•…ํ•˜๊ณ  ์šด์˜์ง„์„ ์กฐ๋กฑํ•˜๋Š” ๋ฌธ๊ตฌ๋ฅผ ๋„์šด ๋™์‹œ์—, ์•ฝ 3400์–ต๋‹ฌ๋Ÿฌ(์•ฝ 440์กฐ์›) ๊ทœ๋ชจ์— ๋‹ฌํ•˜๋Š” ์ฒœ๋ฌธํ•™์  ๊ทœ๋ชจ์˜ ์œ ๋ฃŒ ์žฌํ™”์™€ ํฌ๊ท€ ์•„์ดํ…œ์„ ์„ธ๊ณ„ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ฌด์ฐจ๋ณ„์ ์œผ๋กœ ๋ฐฐํฌํ•œ ์‚ฌ๊ฑด์ด๋‹ค.

     

    ์ด๋ฒˆ ๊ณต๊ฒฉ์˜ ๋ฐฐํ›„์—๋Š” ์ตœ๊ทผ ๊ณต๊ฐœ๋œ ๋ชฝ๊ณ DB(MongoDB)์˜ ์น˜๋ช…์  ์ทจ์•ฝ์  ‘๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ’(MongoBleed)๊ฐ€ ์ž๋ฆฌ ์žก๊ณ  ์žˆ๋‹ค. ๋ฏธ๊ตญ ์‚ฌ์ด๋ฒ„๋ณด์•ˆ ๋ฐ ์ธํ”„๋ผ ๋ณด์•ˆ๊ตญ(CISA)์€ ํ•ด๋‹น ์ทจ์•ฝ์ ์— ๋Œ€ํ•œ ๊ฒฝ๊ณ ๋ฅผ ๋ฐœ๋ นํ•˜๊ณ  ์ฆ‰๊ฐ์ ์ธ ๋Œ€์‘์„ ๋‹น๋ถ€ํ–ˆ๊ณ , ์ง€๋‚œ 29์ผ ๋ชฝ๊ณ DB์—์„œ ๋ฐœ๊ฒฌ๋œ ์ทจ์•ฝ์  ‘CVE-2025-14847’์„ KEV(Known Exploited Vulnerabilities)์— ์ถ”๊ฐ€ํ–ˆ๋‹ค.

     

    ๋ณด์•ˆ ์ „๋ฌธ ๊ทธ๋ฃน ๋ธŒ์ด์—‘์Šค ์–ธ๋”๊ทธ๋ผ์šด๋“œ(vx-underground)๋Š” ์ด๋ฒˆ ๊ณต๊ฒฉ์„ ํ†ตํ•ด ์œ ๋น„์†Œํ”„ํŠธ์˜ 30๋…„ ์น˜ ์†Œ์Šค ์ฝ”๋“œ์™€ ๊ฐœ๋ฐœ ํ‚คํŠธ(SDK) ์•ฝ 900GB ๋ถ„๋Ÿ‰์ด ์œ ์ถœ๋์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๋‹ค๊ณ  ๋ถ„์„ํ–ˆ๋‹ค.

     

    ๋ชฝ๊ณ DB๋Š” ์ „ ์„ธ๊ณ„์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ์˜คํ”ˆ์†Œ์Šค ๊ธฐ๋ฐ˜ ๊ด€๋ฆฌํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ์‹œ์Šคํ…œ(DBMS)์ด๋‹ค. DB์—”์ง„(DB-Engines)์— ๋”ฐ๋ฅด๋ฉด, ๋ชฝ๊ณ DB๋Š” 2025๋…„ 12์›” ๊ธฐ์ค€ ์ „์ฒด DBMS ์ˆœ์œ„์—์„œ 5์œ„๋ฅผ ์ฐจ์ง€ํ•˜๊ณ  ์žˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ๋ณด์•ˆ ์ธํ…”๋ฆฌ์ „์Šค ํ”Œ๋žซํผ ‘์„ผ์‹œ์Šค(Censys)’๋Š” ์ง€๋‚œ 27์ผ ์ „ ์„ธ๊ณ„ ์•ฝ 8๋งŒ 7,000๋Œ€๊ฐ€ ๋„˜๋Š” ์‹œ์Šคํ…œ์ด CVE-2025-14847 ์ทจ์•ฝ์ ์— ๋…ธ์ถœ๋ผ ์žˆ๋‹ค๊ณ  ๋ฐœํ‘œํ–ˆ๋‹ค. ํด๋ผ์šฐ๋“œ ๋ณด์•ˆ ๊ธฐ์—… ‘์œ„์ฆˆ(Wiz)’๋„ ์ „์ฒด ํด๋ผ์šฐ๋“œ ํ™˜๊ฒฝ์˜ 42%๊ฐ€ ์ด ์ทจ์•ฝ์ ์„ ์ง€๋‹Œ ๋ชฝ๊ณ DB ๋ฒ„์ „์„ ์ด์šฉ ์ค‘์ด๋ผ๊ณ  ๋ฐํ˜”๋‹ค.

     

     

     

    โš ๏ธ ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ(MongoBleed) ์ทจ์•ฝ์ ์ด๋ž€?

    ‘๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ(MongoBleed)’๋กœ ๋ถˆ๋ฆฌ๋Š” CVE-2025-14847์€ ๋ชฝ๊ณ DB ์„œ๋ฒ„์—์„œ ๋ฐœ๊ฒฌ๋œ ๋ฉ”๋ชจ๋ฆฌ ์ฒ˜๋ฆฌ ์ทจ์•ฝ์ ์ด๋‹ค. ์ธ์ฆ๋˜์ง€ ์•Š์€ ๊ณต๊ฒฉ์ž๊ฐ€ ํŠน์ˆ˜ํ•˜๊ฒŒ ์กฐ์ž‘๋œ ์š”์ฒญ์„ ๋ณด๋‚ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค(DB) ์ธ์ฆ ์ •๋ณด๋‚˜ DB์— ๋‹ด๊ธด ๋ฏผ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ํƒˆ์ทจํ•˜๋Š” ๋ฐ ์•…์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๊ณผ๊ฑฐ ํฐ ํŒŒ์žฅ์„ ์ผ์œผ์ผฐ๋˜ 'ํ•˜ํŠธ๋ธ”๋ฆฌ๋“œ(Heartbleed)'์™€ ์œ ์‚ฌํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ ์ •๋ณด๊ฐ€ ์œ ์ถœ๋œ๋‹ค๋Š” ์˜๋ฏธ์—์„œ ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ๋ผ๋Š” ์ด๋ฆ„์ด ๋ถ™์—ˆ๋‹ค.

     

    ๋ชฝ๊ณ DB๋Š” ๋„คํŠธ์›Œํฌ๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ ํšจ์œจ์„ฑ์„ ์œ„ํ•ด zlib์ด๋ผ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์••์ถ•ํ•ด์„œ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์ œ๋Š” ์„œ๋ฒ„๊ฐ€ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์„œ ๋‹ค์‹œ ํ’€ ๋•Œ(์••์ถ• ํ•ด์ œ), ์‹ค์ œ๋กœ ํ’€๋ฆฐ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฏธ๋ฆฌ ์žก์•„๋†“์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„(๋ฒ„ํผ) ์ „์ฒด๋ฅผ ๊ทธ๋Œ€๋กœ ๋Œ๋ ค์ค€๋‹ค๋Š” ์ ์ด๋‹ค.

     

    Step 1) ์กฐ์ž‘๋œ ์ด์ค‘ ๋ ˆ์ด์–ด ํŒจํ‚ท ์ „์†ก (OP_COMPRESSED ๋ฐ BSON ์กฐ์ž‘)

    ๊ณต๊ฒฉ์ž๋Š” ์„œ๋ฒ„์— ์•„์ฃผ ์ž‘์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ zlib์œผ๋กœ ์••์ถ•ํ•ด์„œ ๋ณด๋‚ด๋Š”๋ฐ, ์ด๋•Œ ํŒจํ‚ท ํ—ค๋”์—๋Š” "์ด ๋ฐ์ดํ„ฐ๋Š” ์••์ถ•์„ ํ’€๋ฉด 1,000๋ฐ”์ดํŠธ์งœ๋ฆฌ๋‹ค"๋ผ๊ณ  ๊ฑฐ์ง“ ์ •๋ณด๋ฅผ ์ ์–ด ๋ณด๋‚ธ๋‹ค.

     

    ๋ชฝ๊ณ DB๋Š” ํ†ต์‹  ์‹œ OP_COMPRESSED๋ผ๋Š” ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๊ณต๊ฒฉ์ž๋Š” ์ด ํ—ค๋” ๋‚ด์˜ uncompressedSize ํ•„๋“œ๋ฅผ ์กฐ์ž‘ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์•ˆ์—๋Š” ์‹ค์ œ ๋ฐ์ดํ„ฐ์ธ BSON์ด ๋“ค์–ด ์žˆ๋Š”๋ฐ, ๊ณต๊ฒฉ์ž๋Š” ์ด ๋ฐ์ดํ„ฐ(BSON)์˜ ํ—ค๋”์— ์žˆ๋Š” ๊ธธ์ด ์ •๋ณด๋„ ์กฐ์ž‘ํ•œ๋‹ค. BSON ๊ฐ์ฒด์˜ document length(๋งจ ์•ž 4๋ฐ”์ดํŠธ)๋ฅผ uncompressedSize ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์‹ค์ œ ๋ฐ์ดํ„ฐ ํฌ๊ธฐ๋ณด๋‹ค ํ›จ์”ฌ ํฌ๊ฒŒ ์„ค์ •ํ•œ๋‹ค.

     

    ํ•„๋“œ๋ช… ํฌ๊ธฐ ์„ค๋ช…
    header 16 bytes ํ‘œ์ค€ ๋ชฝ๊ณ DB ๋ฉ”์‹œ์ง€ ํ—ค๋”
    originalOpcode 4 bytes ์••์ถ• ์ „์˜ ์›๋ž˜ ๋ช…๋ น ์ฝ”๋“œ (์˜ˆ: OP_MSG)
    uncompressedSize 4 bytes ์••์ถ•์„ ํ’€์—ˆ์„ ๋•Œ์˜ ์˜ˆ์ƒ ํฌ๊ธฐ
    compressorId 1 byte ์••์ถ• ์•Œ๊ณ ๋ฆฌ์ฆ˜ ID (zlib = 1)
    compressedMessage ๋ณ€๋™ ์‹ค์ œ zlib์œผ๋กœ ์••์ถ•๋œ ๋ฐ์ดํ„ฐ

     

    Step 2) ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น

    ์„œ๋ฒ„๋Š” ํ—ค๋” ์ •๋ณด๋งŒ ๋ฏฟ๊ณ  "์•„, 1,000๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ๊ฐ€ ์˜ค๋Š”๊ตฌ๋‚˜"๋ผ๊ณ  ์ƒ๊ฐํ•˜๋ฉฐ ๋ฉ”๋ชจ๋ฆฌ์— 1,000๋ฐ”์ดํŠธ ํฌ๊ธฐ์˜ ๋นˆ ๊ณต๊ฐ„(ํž™ ๋ฒ„ํผ)์„ ๋งŒ๋“ ๋‹ค. ์ด๋•Œ ๋ฉ”๋ชจ๋ฆฌ์—๋Š” ์ด์ „์— ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์‚ฌ์šฉํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๊ฐ€ ๋‚จ์•„์žˆ์„ ์ˆ˜ ์žˆ๋‹ค.

     

    Step 3) ๋ถ€์‹คํ•œ ๋ฐ์ดํ„ฐ ์ฑ„์šฐ๊ธฐ

    ์„œ๋ฒ„๊ฐ€ ์••์ถ•์„ ํ’€๋ฉด ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” 10๋ฐ”์ดํŠธ๋ฟ์ด๋ฏ€๋กœ, ์ƒ์„ฑ๋œ 1,000๋ฐ”์ดํŠธ ๋ฒ„ํผ ์ค‘ ์•ž๋ถ€๋ถ„ 10๋ฐ”์ดํŠธ๋งŒ ์ฑ„์›Œ์ง„๋‹ค. ๋‚˜๋จธ์ง€ 990๋ฐ”์ดํŠธ์—๋Š” ์ด์ „์— ๋‹ค๋ฅธ ์ž‘์—…์—์„œ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€ ๋‚จ์€ ๋ฐ์ดํ„ฐ๋“ค์ด ๊ทธ๋Œ€๋กœ ๋“ค์–ด์žˆ๋‹ค.

     

    Step 4) ๋ฉ”๋ชจ๋ฆฌ ์œ ์ถœ(Bleed)

    ๋ชฝ๊ณ DB์˜ ์ทจ์•ฝํ•œ ์ฝ”๋“œ(message_compressor_zlib.cpp)๋Š” "์‹ค์ œ๋กœ ํ’€๋ฆฐ 10๋ฐ”์ดํŠธ๋งŒ ๋ณด๋‚ด๋ผ"๊ณ  ๋ช…๋ นํ•˜๋Š” ๋Œ€์‹ , "๋ฐฉ๊ธˆ ๋งŒ๋“  1,000๋ฐ”์ดํŠธ ๋ฒ„ํผ ์ „์ฒด๋ฅผ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ณด๋‚ด๋ผ"๊ณ  ์ฒ˜๋ฆฌํ•œ๋‹ค.

    // message_compressor_zlib.cpp ๋‚ด๋ถ€์˜ ์••์ถ• ํ•ด์ œ ํ•จ์ˆ˜ ๋กœ์ง
    // (์ดํ•ด๋ฅผ ๋•๊ธฐ ์œ„ํ•ด ๊ฐ„๋žตํ™”๋œ C++ ์ฝ”๋“œ)
    
    void ZlibCompressor::uncompress(const char* input, size_t inputLen, char* output, size_t expectedUncompressedLen) {
        z_stream strm;
        // ... zlib ์ดˆ๊ธฐํ™” ...
    
        strm.next_in = reinterpret_cast<Bytef*>(const_cast<char*>(input));
        strm.avail_in = inputLen;
        strm.next_out = reinterpret_cast<Bytef*>(output);
        
        // ์ทจ์•ฝ์  ์ง€์ : expectedUncompressedLen(ํ—ค๋”์—์„œ ์˜จ ๊ฐ’)๋งŒํผ ์ถœ๋ ฅ์„ ํ—ˆ์šฉํ•จ
        strm.avail_out = expectedUncompressedLen; 
    
        int ret = inflate(&strm, Z_FINISH);
    
        if (ret != Z_STREAM_END) {
            // ์—๋Ÿฌ ์ฒ˜๋ฆฌ...
        }
    
        // [์น˜๋ช…์  ๊ฒฐํ•จ] 
        // ์‹ค์ œ๋กœ ์••์ถ• ํ•ด์ œ๋œ ๋ฐ์ดํ„ฐ ์–‘(strm.total_out)์„ ํ™•์ธํ•˜์ง€ ์•Š๊ณ , 
        // ์‚ฌ์šฉ์ž๊ฐ€ ์š”์ฒญํ•œ expectedUncompressedLen ์ „์ฒด๋ฅผ ์œ ํšจํ•œ ์‘๋‹ต์œผ๋กœ ๊ฐ„์ฃผํ•˜์—ฌ ๋ฐ˜ํ™˜ํ•จ.
    }

     

    Step 5) ์ •๋ณด ํƒˆ์ทจ

    ๊ณต๊ฒฉ์ž๋Š” ์ž์‹ ์ด ๋ณด๋‚ธ 10๋ฐ”์ดํŠธ ๋ฐ์ดํ„ฐ์™€ ํ•จ๊ป˜, ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ๋‚จ์•„์žˆ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ, ์„ธ์…˜ ํ† ํฐ, API ํ‚ค, ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ฟผ๋ฆฌ ๋‚ด์šฉ ๋“ฑ์ด ๋‹ด๊ธด 990๋ฐ”์ดํŠธ์˜ ์ •๋ณด๋ฅผ ๊ณ ์Šค๋ž€ํžˆ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

     

    ์ด์ฒ˜๋Ÿผ {"action":"ping"}์ด๋ผ๋Š” ์งง์€ ๋ฐ์ดํ„ฐ ๋’ค์—, ์ด์ „์— ๋กœ๊ทธ์ธํ–ˆ๋˜ ๋‹ค๋ฅธ ๊ด€๋ฆฌ์ž์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ ๊ฐ’์ด๋‚˜ ์„ธ์…˜ ID ๋“ฑ์ด ์œ ์ถœ๋  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ๐Ÿชข ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ(MongoBleed) PoC 

    https://github.com/joe-desimone/mongobleed

     

    GitHub - joe-desimone/mongobleed

    Contribute to joe-desimone/mongobleed development by creating an account on GitHub.

    github.com

     

    PoC ์ฝ”๋“œ๋Š” ์œ„ github์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ์š” ์ฝ”๋“œ๋ฅผ ์‚ดํŽด๋ณด๋ฉด,

     

    1. BSON ๊ธธ์ด ์กฐ์ž‘ (send_probe ํ•จ์ˆ˜)

    # ์‹ค์ œ ๋ฐ์ดํ„ฐ๋Š” ์•„์ฃผ ์ž‘์ง€๋งŒ, ์ „์ฒด ๊ธธ์ด(doc_len)๋ฅผ ์•„์ฃผ ํฌ๊ฒŒ ์†์ž„
    content = b'\x10a\x00\x01\x00\x00\x00'  # int32 a=1 (์‹ค์ œ๋ก  ๋ช‡ ๋ฐ”์ดํŠธ ์•ˆ ๋จ)
    bson = struct.pack('<i', doc_len) + content # ํ•˜์ง€๋งŒ doc_len์—๋Š” 1000 ๊ฐ™์€ ํฐ ๊ฐ’์„ ๋„ฃ์Œ

     

    2. ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ ํŠธ๋ฆฌ๊ฑฐ (OP_COMPRESSED)

    # OP_COMPRESSED ํ—ค๋” ๊ตฌ์„ฑ
    payload = struct.pack('<I', 2013)  # original opcode (OP_MSG)
    payload += struct.pack('<i', buffer_size)  # [ํ•ต์‹ฌ] ๊ฑฐ์ง“๋œ ์••์ถ• ํ•ด์ œ ํฌ๊ธฐ ์ž…๋ ฅ
    payload += struct.pack('B', 2)  # zlib ์••์ถ• ๋ฐฉ์‹ ์ง€์ •
    payload += compressed # ์••์ถ•๋œ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

     

    3. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ด์šฉํ•œ ํƒˆ์ทจ (extract_leaks ํ•จ์ˆ˜)

    # ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์˜ˆ์‹œ: "field name '๊ด€๋ฆฌ์ž๋น„๋ฐ€๋ฒˆํ˜ธ123' is invalid"
    for match in re.finditer(rb"field name '([^']*)'", raw):
        data = match.group(1)
        leaks.append(data)

     

    => ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ ์ทจ์•ฝ์ ์€ ์ฝ”๋“œ์—์„œ๋„ ์•Œ ์ˆ˜ ์žˆ๋“ฏ์ด, ๋‹จ์ˆœํžˆ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๋Œ๋ ค๋ฐ›๋Š” ๊ฒƒ์— ๊ทธ์น˜์ง€ ์•Š๊ณ , BSON ํŒŒ์‹ฑ ์—๋Ÿฌ๋ฅผ ์œ ๋„ํ•œ๋‹ค. ์„œ๋ฒ„๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ฝ๋‹ค๊ฐ€ "์–ด? ์ด ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฆ„์ด ์ด์ƒํ•œ๋ฐ?"๋ผ๊ณ  ์—๋Ÿฌ ๋ฉ”์‹œ์ง€์— ๋ฉ”๋ชจ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๊ฒŒ ๋งŒ๋“œ๋Š” ๋ฐฉ์‹์ด๋‹ค.

     

    ๐Ÿ”ฐ ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ(MongoBleed) vs ํ•˜ํŠธ๋ธ”๋ฆฌ๋“œ(HeartBleed)

    ๊ตฌ๋ถ„ ํ•˜ํŠธ๋ธ”๋ฆฌ๋“œ (Heartbleed) ๋ชฝ๊ณ ๋ธ”๋ฆฌ๋“œ (MongoBleed)
    ์‹๋ณ„ ๋ฒˆํ˜ธ CVE-2014-0160 CVE-2025-14847
    ๊ณต๊ฒฉ ๋Œ€์ƒ OpenSSL (์›น ์„œ๋ฒ„ ์•”ํ˜ธํ™” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ) MongoDB (๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œ์Šคํ…œ)
    ๋ฐœ์ƒ ์ง€์  ์ „์†ก ๊ณ„์ธต (TLS/SSL ํ•˜ํŠธ๋น„ํŠธ ํ™•์žฅ) ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต (zlib ์••์ถ• ๋กœ์ง)
    ์กฐ์ž‘ ๋ฐฉ์‹ ๋‹จ์ˆœํ•œ ํŽ˜์ด๋กœ๋“œ ๊ธธ์ด ๊ฐ’ ์กฐ์ž‘ ์ด์ค‘ ์กฐ์ž‘ (์••์ถ• ํ—ค๋” + BSON ๊ธธ์ด)
    ์œ ์ถœ ๋ฐ์ดํ„ฐ ์„œ๋ฒ„ ๊ฐœ์ธํ‚ค, ์ฟ ํ‚ค, ์‚ฌ์šฉ์ž ์•„์ด๋””/๋น„๋ฒˆ DB ๊ด€๋ฆฌ์ž ์„ธ์…˜, ์ฟผ๋ฆฌ๋ฌธ, ์†Œ์Šค์ฝ”๋“œ ํ‚ค
    ํƒ์ง€ ๋‚œ์ด๋„ ๋งค์šฐ ๋‚ฎ์Œ (๋น„์ •์ƒ ํŒจํ‚ท ํƒ์ง€ ์‰ฌ์›€) ๋†’์Œ (์ •์ƒ์ ์ธ ์••์ถ• ํ†ต์‹ ์œผ๋กœ ์œ„์žฅ)

    'News' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

    [2025-12-09] Stop Putting Your Passwords Into Random Websites  (0) 2025.12.10
    [CVE-2025-55182] React2Shell  (0) 2025.12.08
    1129 ๋ณด์•ˆ๋‰ด์Šค  (0) 2022.11.29
    0913 ๋ณด์•ˆ๋‰ด์Šค  (0) 2022.09.13
    0912 ๋ณด์•ˆ๋‰ด์Šค  (0) 2022.09.12

    ๋Œ“๊ธ€

Designed by Tistory.