השדה שנבדק הוא לא השדה שנקרא: החולשה שאיפשרה הרצת קוד בטלגרם לאנדרואיד בזמן שיחה קולית
בסרטון שפרסמה חברת האבטחה NebuSec רואים שני טלפונים זה לצד זה, אחד מסומן כתוקף ואחד כקורבן. בטלפון של הקורבן מישהו עונה לשיחת טלגרם רגילה, וכחצי דקה אחר כך המסך עובר למסך הבית, האייקונים נופלים למטה כמו אבנים, ובמקומם מופיע לוגו עם הכתובית HACKED BY NEBUSEC.
מדובר, לפי החברה, בחולשה בטלגרם לאנדרואיד שאיפשרה לתוקף להריץ קוד על הטלפון של הקורבן דרך שיחה קולית, מהרגע שהקורבן עונה. התוקף לא צריך הרשאות מיוחדות ולא קובץ שמישהו פותח, אלא חשבון טלגרם רגיל. את הפרטים העבירה NebuSec ל-The Hacker News, ובהם טווח הגרסאות שבהן החולשה פעילה. טלגרם תיקנה אותה בגרסה 12.10.4 של האפליקציה, שיצאה בסוף ספטמבר, והחברה פרסמה את הממצא ב-29 באוקטובר. באותו יום עוד לא היה לחולשה מזהה CVE.
את הטעות עצמה אפשר לקרוא בקוד המקור שטלגרם מפרסמת, והיא קטנה באופן מטריד. נעבור על מה בדיוק לא בסדר שם, למה אותו תיקון הגיע לאנדרואיד ארבעה חודשים אחרי שנכנס לקוד של האייפון, ומה NebuSec עדיין לא הראתה.
ההודעות שעוברות בתוך השיחה, מתחת לקול
כששני משתמשי טלגרם מדברים, האפליקציות לא מעבירות ביניהן רק אודיו. הן מחליפות גם הודעות קצרות שמסדרות את השיחה ומדווחות על מצבה: מי התחבר, אילו ערוצי מדיה פתוחים, ומה קורה ברגע נתון בצד השני. אחד מסוגי ההודעות האלה נקרא MediaState, והוא מדווח דברים פשוטים למדי, אם המיקרופון מושתק, אם המצלמה דולקת, ובאיזו זווית לצייר את הווידאו.
שלוש האפליקציות של טלגרם, אנדרואיד, אייפון ודסקטופ, לא מממשות את זה כל אחת לעצמה. יש להן ספרייה משותפת אחת בשם tgcalls שמטפלת בשיחות הקול והווידאו, והקוד שמפרסר את הודעות ה-MediaState יושב בה. כלומר טעות אחת שם היא טעות בשלוש האפליקציות בבת אחת, וגם תיקון אחד שם הוא תיקון לכולן. התיאוריה הזאת, כמו שנראה מיד, לא ממש החזיקה בפועל.
השדה שנבדק הוא לא השדה שנקרא
הקוד מתייחס להודעה שהגיעה כאל אוסף של שדות עם שמות. בשביל כל שדה הוא מחפש את השם באוסף, והחיפוש מחזיר אחת משתיים: מצביע לערך, או סימן מיוחד שאומר "השדה הזה לא נמצא כאן". הכלל היחיד שחייבים לשמור הוא לבדוק את הסימן לפני שקוראים את הערך, כי קריאה דרך הסימן הזה היא קריאה מזיכרון שלא שייך לנתונים בכלל.
בקטע שמטפל בזווית הווידאו, בקוד המקור של גרסה 12.10.3, הקוד עושה בדיוק חצי מזה. הוא מחפש את השדה videoRotation, בודק שהוא נמצא, בודק שהערך שלו הוא מספר, ואז קורא את הערך מהשדה videoState. שם אחר, חיפוש אחר, שדה אחר. זאת שגיאת העתק-הדבק הקלאסית, וההשלכה שלה היא שאם ההודעה הגיעה בלי השדה videoState, החיפוש המוקדם יותר השאיר את אותו סימן "לא נמצא", והקוד קורא דרכו. ב-C++ זאת התנהגות לא מוגדרת, וזאת נקודת ההתחלה של חלק גדול מהחולשות שמאפשרות בסוף הרצת קוד.
NebuSec תיארה את החולשה כקוד שלא טיפל נכון בשדות חסרים וניגש לזיכרון שלא היה אמור. בדיקה של The Hacker News מצאה בקוד שטלגרם פרסמה חולשה שמתאימה לתיאור, וההשוואה לגרסה 12.10.4 מראה שינוי אחד בלבד: ארבע הקריאות שהצביעו על videoState מצביעות עכשיו על videoRotation.
אז למה התיקון נקרא "תיקון סיבוב מצלמה"?
כאן מתחבר החלק המעניין. גם כשהשדה videoState כן הגיע בהודעה, הערך שלו הוא מחרוזת ולא מספר. קריאה שלו כמספר מחזירה אפס, ולכן ההשוואה לזוויות 90, 180 ו-270 כמעט לא התקיימה, והווידאו צויר תמיד בזווית אפס. התסמין שמשתמשים ראו לא היה קריסה ולא חשד לפריצה, אלא וידאו שמופיע מסובב לא נכון.
ככה גם נראה התיקון כשהוא נכתב. השינוי ב-tgcalls נושא את הכותרת Fix camera rotation, ולפי The Hacker News הוא נכנס ב-21 באפריל 2026. משם הוא זלג לאפליקציות בקצב שלהן: לקוד של האייפון בגרסה 12.7 במאי, לדסקטופ בגרסה 7.0.1 ביולי, ולאנדרואיד רק ב-12.10.4 בספטמבר. NebuSec אומרת שאפשר לעורר את החולשה בכל הגרסאות מ-8.6.2 ועד 12.10.3, כלומר כל מה שיצא בין מרץ 2022 לספטמבר 2026. (זה בדיוק המקרה שבו באג שנראה קוסמטי שוכב בקוד ארבע שנים וחצי, כי אף אחד לא שאל מה עוד קורה כשהשדה חסר.)
מה הוכח, ומה עדיין לא
הטעות בקוד מתועדת, ואפשר לקרוא אותה בעצמכם בשני הקישורים שלמעלה. הדרך ממנה ועד להרצת קוד בפועל היא כבר עניין אחר, והיא מסתמכת על הסרטון ועל מה שהחברה אומרת. ב-29 באוקטובר לא היה באתר של NebuSec שום ניתוח טכני של החולשה, והסרטון עצמו לא מראה איזו גרסה של טלגרם או של אנדרואיד רצה על הטלפון שנפרץ. The Hacker News פנה ל-NebuSec ולטלגרם בשאלה אם החולשה נוצלה במתקפות אמיתיות, ושאל את NebuSec לאיזה מידע על הטלפון הקוד של התוקף יכול להגיע.
מה שהחברה כן אמרה: היא אימתה את החולשה בשיחות פרטיות על טלפונים מבוססי ARM64, ואין לה עד כה עדות שהיא משפיעה ישירות על אפליקציות האייפון והדסקטופ של טלגרם או על שיחות קבוצתיות. NebuSec, סטארטאפ בגיבוי Y Combinator, מספרת שהמוצר שלה הוא זה שמצא את החולשה, ושהוא מריץ את המודל GPT-5.4 של OpenAI. ביולי אותה חברה תיארה שרשרת ניצול באנדרואיד שהתחילה מחולשה בפיירפוקס והגיעה עד הקרנל של מכשיר ARM64.
החזית השנייה: הסטיקרים שטלגרם מצפה לסנן בשרת
שיחות הקול הן לא החזית היחידה שנפתחה לטלגרם החודש. ב-15 באוקטובר פרסמה Zero Day Initiative אזהרה על חולשה לא מתוקנת ב-rlottie, הספרייה שמציירת את הסטיקרים המונפשים של טלגרם. החולשה, שמסומנת CVE-2026-111105 בציון 7.0, נובעת מחוסר אימות של נתונים שהמשתמש מספק ומאפשרת כתיבה לפני תחילת האזור שהוקצה בזיכרון. הניצול דורש שהקורבן יפתח קובץ או עמוד זדוני, ולפי ZDI התוצאה היא הרצת קוד בהקשר של התהליך. את הקרדיט מקבל מייקל דה-פלנטה מ-ZDI.
ציר הזמן באזהרה מספר סיפור בפני עצמו. ZDI דיווחה לטלגרם ב-26 במרץ. ב-31 במרץ השיבה טלגרם שהחולשה ממותנת על ידי אימות בצד השרת, וב-14 באפריל ביקשה מ-ZDI שרשרת הרצת קוד מרחוק שלמה. ZDI ענתה שדרישה כזאת לא עולה בקנה אחד עם נוהלי גילוי מתואם ועלולה לפגוע במשתמשים פעילים, וב-30 ביולי הודיעה שבכוונתה לפרסם את המקרה כחולשת יום-אפס. כך הגיעה האזהרה לאוויר בלי תיקון.
ההנחה שהשרת מספיק היא בדיוק מה שהחוקר סייפלדין עזיז מתכוון לתקוף בהרצאה ב-OffensiveCon בטוקיו. לפי התקציר שלו, הציון המקורי של אותה חולשה היה 9.8 והורד ל-7.0 בעקבות אותה טענה. המחקר שלו, שנמשך שנה, הזין את הספרייה בכמויות גדולות של קלט שבור בהכוונת מודל שפה, טכניקה שנקראת fuzzing, ומצא כמה חולשות השחתת זיכרון ב-rlottie שנוגעות ללקוחות אייפון, אנדרואיד ודסקטופ. "ההפתעה לא הייתה הבאגים עצמם, אלא עד כמה מודל הסיכון של טלגרם הסתמך על כך שסטיקרים זדוניים לא ייכנסו, דרך אימות בצד השרת", נכתב בתקציר. משם הוא מתאר חולשות לוגיות נפרדות במסלול האספקה והאימות של הסטיקרים, שאיפשרו להגיע אל אותו קוד ציור שאמור היה להיות בלתי נגיש, ושרשור שלהן להרצת קוד על טלגרם לאייפון.
טלגרם, מצידה, כן מחליפה את הספרייה. tlottie, המחליפה, כתובה ב-Rust, וה-README שלה מצהיר במפורש שה-JSON של הסטיקר מטופל כקלט לא מהימן. באנדרואיד ההחלפה הושלמה: קובץ ההגדרות של גרסה 12.10.0 מכיל את tlottie ולא את rlottie. בקוד האייפון שתי הספריות עדיין רשומות זו לצד זו.
מה זה אומר בפועל
מי שמשתמש בטלגרם באנדרואיד צריך לוודא שהגרסה היא 12.10.4 ומעלה, ומספר הגרסה מופיע בתחתית עמוד ההגדרות של האפליקציה. מי שמקבל עדכונים אוטומטיים מחנות Play כנראה מכוסה מאז סוף ספטמבר, ומי שהתקין את ה-APK מהאתר של טלגרם צריך לבדוק ידנית, כי שם אין מי שיעדכן במקומו.
לארגונים שבהם טלגרם יושבת על טלפונים מנוהלים יש כאן תזכורת צרה יותר. שטח התקיפה של אפליקציית מסרים הוא לא רק הקישורים והקבצים שמגיעים בצ'אט, אלא גם מסלול הקמת השיחה, שמתחיל לרוץ ברגע שהמשתמש עונה ולא דורש ממנו שום פעולה נוספת. ובצד הסטיקרים, בניגוד לשיחות, התיקון בלקוח האייפון עוד לא שם.
תגובות