
POST אחד ללא אימות ל-Management API של Bifrost הפעיל פקודה בתור משתמש ה-Gateway
- OrcaחדשOrcaCyber: GLM 5.3 Flash Abliterated2026-10-2795 tok/s
- OrcaחדשOrcaCyber: Qwen3.8 Flash Next Abliterated2026-10-26$0.80 / $1.60 לכל 1M טוקנים · 249 tok/s
- OrcaחדשOrcaCyber: MiMo V2.6 Flash Abliterated2026-10-26$0.80 / $1.60 לכל 1M טוקנים · 86 tok/s
- MoonshotחדשMoonshotAI: Kimi K3.1 Pro2026-10-2455אינטליגנציה
- OrcaחדשOrcaCyber: DeepSeek V4.1 Flash Abliterated2026-10-23$0.80 / $1.60 לכל 1M טוקנים · 109 tok/s
- minimaxחדשMiniMax: M3.1 Flash2026-10-1943אינטליגנציה
- OrcaחדשOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 לכל 1M טוקנים · 51 tok/s
- deepseekחדשDeepSeek: DeepSeek V4.1 Flash 10172026-10-1745אינטליגנציה
- DeepSeekחדשDeepSeek: DeepSeek V4.1 Flash2026-10-1740אינטליגנציה
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 לכל 1M טוקנים · 114 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2952אינטליגנציה
- anthropicAnthropic: Claude Sonnet 5.52026-09-2856אינטליגנציה
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 לכל 1M טוקנים · 120 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2238אינטליגנציה
- OpenAIOpenAI: GPT-6 Sol2026-09-2248אינטליגנציה
- AnthropicAnthropic: Claude Opus 5.52026-09-2258אינטליגנציה
- xiaomiXiaomi: MiMo-V2.6-Flash2026-09-2138אינטליגנציה
- xiaomiXiaomi: MiMo-V2.6-Pro2026-09-2146אינטליגנציה
- xAIGrok 4.72026-09-2146אינטליגנציה
- OrcaOrca: OrcaCyber Zero 1.02026-09-17$3.00 / $7.50 לכל 1M טוקנים · 191 tok/s
ב-14 בספטמבר 2026 פרסמה JFrog Security Research CVE-2026-90898, פגיעות הרצת פקודות בBifrost — שער ה-AI בקוד פתוח שמתוחזק על ידי Maxim — והעניקה לה ציון 9.8 מתוך 10. המתקפה הייתה בקשת HTTP אחת. קריאה לא מאומתת לPOST /api/mcp/client רושמת לקוח stdio MCP, שאותו Bifrost מפרש כשם תוכנית בתוספת רשימת ארגומנטים ומפעיל מיד, לפני כל לחיצת יד של MCP, בתור המשתמש שמריץ את השער; בתמונה הרשמית המשתמש הזה הוא appuser. שער הוא גם המקום שבו נמצאים מפתחות הספק והמפתחות הווירטואליים של מפעיל, כך שתהליך שרץ שם מגיע לאישורי גישה. מה שהפך את הבקשה לאנונימית היה ברירת מחדל שהופצה עם המוצר: governance.auth_config.is_enabled הוא false, ובניסוח של JFrog, "כיבוי אימות פירושו שכל קורא הוא מנהל מקומי." אף מקור מצוטט אינו מדווח שהפגיעות נוצלה אי פעם. המקורות של הרשומה עצמה, דירוג החומרה והערכת המהימנות נמצאים בארכיון אירועי ה-AI, לצד פגיעויות ה-AI-gateway וה-MCP המתועדות האחרות של השנה האחרונה.
Bifrost הוא שירות יחיד שיושב בין אפליקציה לבין מודלי השפה שאליהם היא קוראת. המאגר שלו מתאר אותו כשער בקוד פתוח ברישיון Apache-2.0 ש"מאחד גישה ל-23+ ספקים ... דרך API יחיד תואם OpenAI", עם פרוקסי MCP, מפתחות וירטואליים, תקציבים ואיזון עומסים לפי ספק בין תכונותיו, והיו לו בערך 9,150 כוכבי GitHub ב-28 באוקטובר 2026. השילוב הזה הוא כל הסיבה שגישה ל-shell במארח המסוים הזה שווה ציון קריטי: התהליך שמנתב את הבקשות הוא גם התהליך שמחזיק את פרטי הגישה לכל יעד במעלה הזרם שאליו הוא מנתב. Hacker News, שדיווח על הפגם ב-22 בספטמבר, ניסח את התוצאה בבירור — מכיוון שהשער מאחסן מפתחות API לכל ספק מחובר, הפעלת פקודות בתהליך השער מעניקה לתוקף גישה לאותם פרטי גישה.
המתקפה כולה הייתה POST בודד
התרעת האבטחה של JFrog, שפורסמה תחת אסמכתא JFSA-2026-001686326, מתארת נקודת קצה שקיימת כדי לאפשר למנהל מערכת להוסיף שרת MCP. לקוח stdio במפרט MCP אינו URL; הוא פקודה והארגומנטים שלה, שאותם תוכנית המארחת אמורה להפעיל. Bifrost מקבל את התצורה הזו דרך API הניהול ומפעיל את התוכנית ברגע שהלקוח נוסף. אין משא ומתן על יכולות, אין בדיקת זהות שרת, אין לחיצת יד שחייבת להצליח קודם — ההתרעה מפורשת בכך שלחיצת היד אינה מה שמתחיל את התהליך.
הוכחת ההיתכנות בהתראת האבטחה היא גוף JSON קצר שנשלח בשעתר (gateway) כאשר האימות נותר בברירת המחדל שלו. היא רושמת לקוח שהפקודה שלו היא /bin/sh והארגומנטים שלו כותבים קובץ סימון, ואז קוראת את קובץ הסימון בחזרה. JFrog מוסיפה פרט תפעולי שחשוב במהלך תגובה לאירוע: ייתכן שבקשת ה-HTTP תסתיים בפסק זמן בעוד Bifrost ממתין ל-handshake שלא מגיע, ופסק זמן ביומנים אינו אומר שהפקודה לא החלה לפעול. התהליך כבר רץ בשלב הזה.
רשומת ה-CVE, שהוקצתה על ידי JFrog כרשות מספור CVE, ממפה את הפגם ל-CWE-306, אימות חסר לפונקציה קריטית, ול-CWE-284, בקרת גישה לא נאותה, ומציינת את שני הקבצים שמכילים את ה-handler ואת ה-middleware שלו: transports/bifrost-http/handlers/mcp.go ו-transports/bifrost-http/handlers/middlewares.go. המודול המושפע הוא github.com/maximhq/bifrost/transports, ב-Linux וב-macOS, עבור כל גרסה נמוכה מ-2.1.0.
ברירת המחדל שהפכה את הבקשה לאנונימית
שום דבר מזה לא היה ניתן לניצול ללא תנאי שני, והתנאי השני הוא ברירת המחדל של המוצר עצמו. שכבת ה-middleware לאימות ניהול של Bifrost נשלטת על ידי governance.auth_config.is_enabled, שמגיע כברירת מחדל כ-false. כשהוא כבוי, ה-middleware מתייחס לכל קורא כמנהל מקומי — הסיכום של הייעוץ עצמו הוא שאימות כבוי פירושו שכל קורא הוא מנהל מקומי — כך שהבדיקה שהייתה אמורה לעצור את הבקשה מעולם לא הייתה בנתיב.
התיקון, בקשת המשיכה #6757, מוזג לפרויקט ב-2 בספטמבר 2026, שנים עשר יום לפני פרסום ה-CVE ושישה ימים לפני הגרסה שנושאת אותו. תיאורו גלוי באופן יוצא דופן לגבי צורת הבעיה: בקשת המשיכה סוגרת שני פרימיטיבים לגישה לא מאומתת באותו API רישום, ולא אחד. הראשון הוא לקוח stdio. השני הוא לקוח MCP מסוג http או sse שמצביע על כתובת loopback או כתובת ברשת פרטית, שאותה הבקשה מכנה פרימיטיב SSRF נגד שירותים פנימיים, "כולל נקודת הקצה של מטא-נתוני הענן 169.254.169.254". שניהם נדחים כעת עם HTTP 403 כאשר הבקשה מגיעה ל-handler ללא בדיקת אישורים אמיתית. מנהלים מאומתים שומרים על שתי היכולות, ומפעילים עדיין יכולים להקצות לקוחות stdio דרך config.json.
הפרימיטיב השני הזה אינו מופיע בטקסט של ה-CVE. הוא נמצא ב-patch, וזו הסיבה שהתיקון הוא שער ולא הסרה: התכונה מעולם לא הייתה הבאג. מה שהיה הבאג הוא היחס לקורא לא מאומת כאל מנהל.
היכן ש-API הניהול היה למעשה מאזין
נגישות היא החלק בתיעוד שהמקורות מתארים באופן העקבי ביותר, ומודדים אותו הכי מעט. הודעת האבטחה של JFrog נותנת את ברירת המחדל של הבינארי הסטנדרטי כ-localhost:8080, מה שמגביל תוקף למארח עצמו. הודעת האבטחה של אותו צוות עבור הפגם הנלווה קובעת שתמונת ה-Docker הרשמית מאזינה על 0.0.0.0 במקום, ו-The Hacker News חוזר על כך: התמונה הופכת את ה-API לניהול לנגיש מחוץ לקונטיינר אם הפורט מפורסם. ה-README quick start של Bifrost עצמו מריץ "docker run -p 8080:8080 maximhq/bifrost", והאפשרות -p של Docker מפרסמת פורט של קונטיינר בכל ממשק מארח אלא אם ניתנת כתובת. הודעת האבטחה ב-GitHub על הפגם מתעדת שהנתיב שדווח אומת מול התמונה maximhq/bifrost:latest שפורסמה, שבה בקשה לא מאומתת הפעילה /bin/sh וכתבה סמן בתור appuser.
מה שאף מקור לא מספק הוא מספר. אין ספירה של מופעי Bifrost חשופים לאינטרנט, אין תוצאת סריקה, אין טלמטריה ואין קורבן. התיעוד אינו כולל נזק ממשי, והיעדר זה הוא עובדה על הדיווח ולא הרגעה — סוג הפגיעות מסוכן רק כאשר שני תנאים מתרחשים יחד, מאזין חשוף וברירת מחדל שלא נגעו בה, ואיש לא פרסם באיזו תדירות הם התקיימו.
נקודת קצה אחת, שני פגמים, סיבת שורש אחת
שמונה ימים לפני הודעת הייעוץ של MCP, ב-6 בספטמבר 2026, אותו צוות מחקר פרסם את CVE-2026-86242, נתיב שני ללא אימות אל אותו תהליך. הוא נמצא על ידי אור פלס וקיבל ציון 8.1, והוא מנצל לרעה את POST /api/plugins: Bifrost מקבל תוסף מותאם אישית מופעל שנתיבו הוא כתובת HTTP, טוען האובייקטים המשותפים מתייחס לנתיב עם קידומת http כאל הורדה, כותב את גוף התגובה לקובץ .so זמני ומוסר את הקובץ הזה ל-plugin.Open של Go. אם הטעינה מצליחה, פונקציית Init אופציונלית רצה מיד עם התצורה של התוקף, בתור משתמש ה-gateway.
גרסת הבנייה קובעת מה התוקף משיג. בבניות מקושרות דינמית שהפרויקט מתעד עבור תוספי Go מותאמים אישית, הטעינה צפויה להצליח, מה שהייעוץ מכנה הרצת קוד מרחוק ללא אימות. בתמונת Docker מקושרת סטטית שפורסמה, plugin.Open נכשל עם "Dynamic loading not supported", כך שאותה בקשה הופכת לזיוף בקשה בצד השרת. תוסף שניתן לטעון חייב גם להתאים לגרסת Go של המארח, למערכת ההפעלה, לארכיטקטורה ולסוג הקישור, וזהו אילוץ ממשי ולא פורמליות. התיקון הוא transports/v2.0.0, דרך pull request #5763, וטווח המושפע הוא כל מה שמתחתיו.
המלכודת היא סדר השחרורים. v2.0.0 מתקנת את נתיב התוסף ואינה מתקנת את נתיב ה-MCP — The Hacker News אומרת זאת במפורש, ומודעת ה-MCP של JFrog מאשרת ש-v2.0.0 עדיין מאפשרת את רישום ה-stdio ללא אימות. מפעיל שתיקן במהירות לאחר מודעת ה-6 בספטמבר היה, בנקודה זו בלבד, עדיין חשוף עד ש-transports/v2.1.0 יצאה ב-8 בספטמבר. שני הפגמים מצטמצמים לאותו משפט בשתי המודעות ובבקשת המשיכה של הספק עצמו: אימות מושבת הוא ברירת המחדל.
מה שהמקורות מבססים, ומה שהם אינם מבססים
המנגנון, טווח הגרסאות, התיקון והקרדיט מוסכמים בהודעה, ברשומת ה-CVE ש-JFrog הקצתה, בבקשת ה-pull request ובהערות השחרור של הפרויקט עצמו, וב-The Hacker News. המחלוקת שנותרה היא בשאלת החומרה, והיא אמיתית.
הציון 9.8 הוא הציון של JFrog בתור ה-CNA המקצה, והוא הציון ש-NVD נושאת — רשומת NVD מפרטת את reefs@jfrog.com כמקור המדד, ונכון ל-28 באוקטובר 2026 היא עדיין מציגה את הרשומה בסטטוס "Awaiting Analysis", כלומר NVD פרסמה את הווקטור של המקצה ולא את הניתוח שלה עצמה עליו. הערכת ה-SSVC של רכז CISA המצורפת לאותה רשומה, עם חותמת זמן של 14 בספטמבר 2026, קובעת ניצול "none", אוטומטיות "yes" והשפעה טכנית "total". מודל EPSS של FIRST העמיד את ההסתברות לניצול ב-30 הימים הבאים על 2.3 אחוזים ב-27 באוקטובר 2026, באחוזון ה-83 מבין כל ה-CVEים שקיבלו ציון, ואף לא ה-CVE הזה ולא CVE-2026-86242 מופיעים בקטלוג CISA Known Exploited Vulnerabilities מתאריך 27 באוקטובר 2026.
לעומת זאת, Maxim חולקת על הדירוג. בהצהרה ל-The Hacker News, אקשאיי דאו, מנהל הטכנולוגיה הראשי ומייסד-שותף של החברה, אמר כי הסיכון המעשי נמוך מכפי שמשתמע מציון הקריטי, משום שניצול דורש שממשק הניהול יהיה נגיש מרשת לא מהימנה ושהמפעיל ישאיר את האימות לא מוגדר; פריסת ברירת המחדל והמתועדת, אמר, ממקמת את השער בתוך רשת פרטית. The Hacker News מדווח כי Maxim רואה בפגם חומרה נמוכה ומשתפת פעולה עם JFrog, שהקצתה את ה-CVE, בעדכון ההערכה. הצהרה זו מופיעה בכלי התקשורת האחד הזה; לא נמצא פרסום שני שמצטט את עמדתה של Maxim, ולא פורסמה גרסה מתוקנת נכון ל-28 באוקטובר 2026 — רשומת ה-CVE עודכנה לאחרונה ב-14 בספטמבר והערך ב-NVD ב-18 בספטמבר, ושניהם עדיין על 9.8.
שני פערים נוספים ראויים לציון מפורש ולא להחלקה. הודעות האבטחה של הפרויקט ב-GitHub, שפורסמו ב-23 בספטמבר 2026 ומייחסות לחוקר של JFrog את הדיווח, עדיין נושאות 9.8 עבור פגם ה-MCP ו-8.1 עבור פגם התוסף, בלי כל סימן לעדכון שמקסים תיאר. והטווחים המושפעים בהודעות אלה כתובים ביחס לגרסאות מודול של Go — מתחת ל-1.5.27 ומתחת ל-1.6.3 — ולא ביחס לתגי השחרור של transports שבהם משתמשות הודעות האבטחה של JFrog, כך שמפעיל שמצליב מסמך אחד עם השני צריך ליישב שתי שיטות מספור לפני שיוכל להחליט אם בנייה מושפעת.

מה השתנה, ומה נאמר למפעילים לעשות
הכרונולוגיה נעה לאחור מן החשיפה, וזה החלק הכי פחות אינטואיטיבי בתיעוד. בקשת משיכה #6757 מוזגה ב-2 בספטמבר 2026. transports/v2.1.0, הגרסה שהייעוץ מציין כראשונה שמכילה את התיקון, פורסמה ב-8 בספטמבר — שישה ימים לפני ש-CVE-2026-90898 פורסם ב-14 בספטמבר. התיקון לתוסף של הפרויקט קדם לייעוץ האבטחתי של עצמו באותו אופן: transports/v2.0.0 יצאה ב-26 באוגוסט, אחד עשר ימים לפני ה-CVE של 6 בספטמבר. מפעילים שעוקבים אחרי גרסאות ששוחררו ולא אחרי פידים קיבלו את התיקונים לפני שקיבלו את האזהרות.
מה שהשדרוג מעניק הוא צר וספציפי. ב-2.1.0 ואילך, רישום stdio לא מאומת מחזיר 403 והפקודה אינה מופעלת; מנהלים מאומתים שומרים על היכולת, והקצאה באמצעות config.json עדיין עובדת. פתרון הביניים של הייעוץ למי שאינו יכול לעבור הוא לקבוע את governance.auth_config.is_enabled ל-true, להשתמש בפרטי מנהל חזקים ולהרחיק את מאזין הניהול מרשתות לא מהימנות. ההנחיה של JFrog לגבי מופעים שפעלו חשופים עם אימות מושבת היא לא לחקור ולקוות: יש להתייחס אליהם כאל מערכות שנפרצו, ולבצע רוטציה של מפתחות וירטואליים ושל פרטי התחברות של ספקים.
חשבון הגרסאות הוא החלק שסביר ביותר שייקרא שלא כהלכה. v2.0.0 אינו מתקן את הפגם הזה. גם קו 1.6.x עד 1.6.11 אינו מכיל את התיקון, והתג החדש ביותר בסדרת 1.6 של הפרויקט הוא transports/v1.6.11, שפורסם ב-14 באוגוסט 2026, כאשר אין קו 1.7 במאגר נכון ל-28 באוקטובר 2026 — לכן אין מהדורה מתוקנת בתוך הסדרה הזו, ומפעיל 1.6.x חייב לעבור ל-2.1.0 או מאוחר יותר במקום להמתין ל-backport. קו המהדורות הנוכחי נמצא הרבה מעבר לנקודה הזו: transports/v2.3.2 פורסם ב-20 באוקטובר 2026.

שני דברים קרו לאחר הפרסום שאנשי הגנה יכולים להשתמש בהם. הודעות האבטחה של הפרויקט ב-GitHub — GHSA-86gf-xh3g-rvxq עבור הפגם ב-MCP ברמת חומרה קריטית ו-GHSA-2qp8-4xgm-fw6g עבור הפגם בתוסף ברמת חומרה גבוהה — פורסמו ב-23 בספטמבר 2026, ונתנו לפידי התלויות וההודעות מזהה נוסף להתאמה לפיו. וב-13 באוקטובר 2026 מוזגה תבנית זיהוי עבור CVE-2026-90898 אל מאגר nuclei-templates הציבורי, מה שאומר שהבדיקה לניסיון רישום לא מאומת היא כעת משהו שצינור סריקה יכול להריץ, ולא משהו שכל צוות צריך לכתוב בעצמו.

מה שנותר פתוח הוא חומרת הפגם, והיא תוכרע או לא תוכרע על ידי שני הארגונים שעדיין מדברים עליה. עמדתו של Maxim, כפי שדווחה, היא ש-9.8 מציג כחמור מדי פגם שתלוי במאזין חשוף ובברירת מחדל שאינה מוגדרת כדי להיות משמעותי — טענה שאפשר לבדוק אותה עקרונית אך לא נבדקה בפומבי, מפני שאיש לא פרסם כמה פריסות עמדו בשני התנאים האלה. עמדתו של JFrog היא הציון שהקצתה בתור CNA, שנותר בתוקפו ברשומת CVE וב-NVD. עד שאחד מהם יפרסם עדכון, המשמעות התפעולית זהה בכל מקרה: הפגם אמיתי ואומת מקצה לקצה על תמונת הקונטיינר שפורסמה, התיקון יצא לפני האזהרה, לסדרת 1.6 אין תיקון כלל, וכל מופע שהורץ עם אימות מושבת על מאזין נגיש יש להתייחס אליו כאירוע אישורי גישה ולא כטלאי שצריך לתזמן.
