בלוג

28 באוקטובר 2026

מה אפליקציית AI שולחנית יכולה להדליף, ואיך ארכיטקטורת האחסון משנה את רדיוס הפגיעה

אחסון מקומי מקטין את רדיוס הפגיעה של באג באפליקציית AI שולחנית, אבל לא מבטל אותו. באג Electron של Granola שתוקן ופורסם כדוגמה, ואז הביקורת על עצמנו.

אפליקציית AI שולחנית יכולה להדליף יותר מאפליקציית ווב, כי היא מחזיקה שני דברים שלשונית בדפדפן לא מחזיקה: גשר מורשה אל מערכת ההפעלה, והנתונים שלכם במנוחה על הדיסק שלכם. השאלה אם באג באחד מהשניים יסתיים באחר צהריים רע או ברבעון רע נקבעת בעיקר על ידי ארכיטקטורת האחסון, כלומר איפה ההערות חיות, מי מחזיק את המפתח, ועד לאן חלון שנפרץ יכול להגיע בלי לשאול אף אחד.

הפוסט הזה עוסק בשאלה השנייה. הוא משתמש בבאג אמיתי, מתוקן ומפורסם באפליקציית Mac בנויה היטב כדוגמה מעשית, ומסתיים במשטח התקיפה שלנו עצמנו, שאינו אפס.

הדוגמה המעשית, עם התיקון באותה נשימה

ב-5 ביולי 2026 פרסמה חברת האבטחה Strix תיאור מפורט של השתלטות על חשבון בלחיצה אחת שמצאה באפליקציית Electron השולחנית של Granola. שווה לקרוא את השרשרת במלואה, כי היא אלגנטית וכי שום דבר בה לא דרש מהאפליקציה להיות רשלנית. נבדק ב-15 בספטמבר 2026 מול התיאור הזה ומול הודעת הגילוי של Granola עצמה.

  • האפליקציה עשתה את ההקשחה הסטנדרטית של Electron: ‏contextIsolation: true, ‏nodeIntegration: false, ויכולות מערכת ההפעלה מאחורי גשר preload מתוחם על window.electron. זו הצורה שאמורים לשלוח.
  • חלונות חדשים היו מוגנים. ‏setWindowOpenHandler חסם חלונות קופצים ושלח קישורים חיצוניים לדפדפן המערכת.
  • לחלון הראשי לא היה מנגנון "חסימה כברירת מחדל" לניווט ברמה העליונה, ולכן שום דבר לא תפס will-navigate או will-redirect. ב-Electron גשר ה-preload מחובר לחלון ולא ניתן מחדש לכל כתובת, ולכן חלון מהימן שניווט לדף של תוקף לקח את הגשר איתו. התיקון ש-Granola שחררה חוסם את הניווט הזה ומעביר כתובות חיצוניות לדפדפן המערכת.
  • הטריגר היה בנאלי. תוקף מגדיר את שם התצוגה שלו כקישור Markdown, מבקש גישה להערה פרטית, ומחכה שהקורבן ילחץ על השם הזה בפיד הפעילות של עצמו.

ואז החלק ששייך לפוסט הזה. בזמן הבדיקה, הרנדרר (renderer) שמר את חומר עטיפת המפתח של SQLite ב-IndexedDB וייצא את מפתח SQLCipher המפוענח לתוך JavaScript. כל מה שהגיע לרנדרר המהימן יכול היה לצעוד ישר דרך גבול ההצפנה במנוחה: מסד הנתונים המקומי היה מוצפן, אבל המפתח היה נגיש מאותו מקום שבו התוקף נמצא עכשיו.

התגובה חשובה לא פחות מהבאג, והיא הסיבה שאפשר בכלל לכתוב את הפוסט הזה. ציר הזמן, מהגילוי של החוקרים ומההודעה של Granola עצמה: דווח ביום שלישי, 23 ביוני 2026, עם הוכחת היתכנות; אושר על ידי הספק בבוקר שלמחרת; תיקון סניטציה בצד השרת נפרס ב-24 ביוני, והגן על המשתמשים בלי שאיש יעדכן את האפליקציה; וריאנט עוקף דווח על ידי החוקרים ב-25 ביוני ותוקן ב-26 ביוני; אימות פנימי הושלם ב-28 ביוני; החוקרים אישרו שהתיקון יעיל ביום שני, 29 ביוני. ‏Granola לא מצאה ראיות לניצול בשטח, פרסמה גילוי משלה, והעבירה את נתיב המפתח כך שמפתח SQLCipher כבר לא נוגע ב-JavaScript של הרנדרר או ב-IndexedDB. שישה ימים מדיווח לתיקון מאושר, כשהמשתמשים מכוסים כבר ביום השני. נבדק ב-15 בספטמבר 2026.

אם המסקנה שלכם היא "האפליקציה הזאת לא בטוחה", קראתם את זה לא נכון. לכל אפליקציה שולחנית שעושה עבודה אמיתית יש גרסה של הבאג הזה בעתיד שלה. מה שמשתנה הוא מה הבאג יכול להגיע אליו, ומה הספק עושה בשבוע שאחרי שהמייל מגיע.

מה השתנה: רדיוס הפגיעה

הורידו את הפרטים ומשתנה אחד עושה את העבודה. ברגע שקוד לא מהימן רץ בתוך רנדרר מורשה, הנזק מוגבל למה שהתהליך הזה יכול להגיע אליו.

  1. סשן וטוקנים. אם טוקני אימות נגישים דרך מעבר IPC גנרי, באג ניווט אחד הוא השתלטות על חשבון ולא תקלת רינדור. בתיאור של Strix, השער האפקטיבי היה רשימת ה-handlers, לא רשימת היתר בצד הרנדרר, ולכן כל ערוץ רשום ניתן היה לקריאה לפי שם; מה שסגר את הנתיב הזה היה מנגנון הניווט: החלון חוסם עכשיו ניווט אל מחוץ למקור האפליקציה המהימן. נבדק ב-15 בספטמבר 2026.
  2. מפתח ההצפנה במנוחה. הצפנה במנוחה היא גבול רק אם המפתח חי במקום שהרנדרר לא יכול להגיע אליו. מפתח שמיוצא לתוך JavaScript הופך את "מסד נתונים מקומי מוצפן" לתווית.
  3. העותק בענן. זה הסעיף שכמעט אף פעם לא מתמחרים. אם ההערות חיות גם בענן של הספק, התקרה של פריצת אישורים היא לא המחשב הנייד שלכם. היא כל פגישה שהחשבון אי פעם הקליט, נגישה מכל דפדפן, בלי לגעת ב-Mac שלכם בכלל. לנתונים מקומיים בלבד יש תקרה פיזית. לנתונים מסונכרנים אין.
  4. משטח היכולות. צילום מסך, מיקרופון, מצלמה, shell: כל מה שמאחורי הגשר נמצא בטווח ברגע שהגשר נמצא בטווח.

סעיף 3 הוא הנקודה של ארכיטקטורת האחסון, והיא חותכת לשני הכיוונים. אחסון מקומי לא הופך אפליקציה לבטוחה. הוא מקטין את המקרה הגרוע ביותר. מחשב נייד גנוב הוא אירוע שונה מטוקן סשן גנוב, ורק אחד מהם מתרחב לכולם.

משטח התקיפה שלנו, נאמר בפשטות

אנחנו מפרסמים ביקורת על עצמנו, ולכן הסעיף הזה אינו מחווה. זה אותו פנקס, מוחל עלינו. כל עובדה למטה נבדקה מול הדף החי הזה נכון ל-28 באוקטובר 2026.

  • ‏Routines היא אפליקציית Mac עם חשבון מאחוריה. בנתיב ברירת המחדל, הנחיה של צ׳אט או של שגרה עוברת מה-Mac שלכם אל getroutines.ai ומשם אל Anthropic תחת המפתח שלנו. אנחנו שומרים את מספר הטוקנים ואת העלות, אף פעם לא את ההנחיה ולא את התשובה. הוסיפו מפתח API משלכם, היכנסו עם ChatGPT, או חברו את Claude Code, ואין שרת של Routines בנתיב.
  • שמע של פגישות אינו יוצא מן הכלל שמותר לנו לדלג עליו. תמלול הפגישות שלנו מזרים שמע אל Deepgram, והכתבה היא מסלול אודיו שני שזורם אל Deepgram בכל תוכנית בזמן שאתם מדברים. "שום דבר לא עוזב את ה-Mac שלכם" הוא משפט שאנחנו לא כותבים, והסיבה שאנחנו לא כותבים אותו נמצאת בביקורת.
  • איפה יושבים טוקני המחברים שלנו עצמנו, מאחר שהפוסט הזה עוסק בדיוק בשאלה הזאת. מתוך הביקורת שפרסמנו, מילה במילה: "אסימוני OAuth של Gmail, Calendar, Microsoft 365 (Outlook בקריאה בלבד) ו-Slack, ואסימוני הבוטים של Telegram ושל אפליקציות Slack, שמורים במסד הנתונים המקומי של האפליקציה על ה-Mac שלכם, לא ב-macOS Keychain; מפתחות ספקי ה-AI ומפתחות API אחרים שאתם מדביקים כן חיים ב-Keychain. פניות של מחברים יוצאות מה-Mac שלכם ישירות אל הספק, ובוטים מתחברים החוצה מה-Mac שלכם, כך ששום שרת של Routines לא יושב באמצע." שתי קריאות כנות של המשפט הזה, ואנחנו חייבים לכם את שתיהן. הטובה: אין עותק של האסימונים שלכם בשרת שאפשר לפרוץ, ניתוק המחבר בהגדרות הוא המתג שהביקורת שלנו מציינת, וסנכרון בענן מסיר אסימונים מהגדרות מחברים לפני שמשהו מסתנכרן. הלא נוחה: מסד נתונים מקומי הוא מאגר חלש יותר מה-Keychain, ולפי ההיגיון של הפוסט הזה עצמו, זו הגרסה שלנו לסעיף 2 למעלה. זה כתוב בדף שלנו כי מדריך שמדרג אפליקציות אחרות חייב לפרסם את השורה הגרועה ביותר של עצמו.
  • מה שנשאר הוא האחסון. הערות הפגישות שלכם הן קובצי markdown על הדיסק שלכם, והתמלולים יושבים במסד נתונים מקומי על המחשב. בטלו את המנוי וההערות עדיין נפתחות, כי הן קבצים. סנכרון וגיבוי בענן כבוי כברירת מחדל. אם תדליקו אותו, המאגר שלכם, תמלולי הפגישות והסיכומים שלכם מועתקים לחשבון ה-Routines שלכם כדי שהמכשירים שלכם יתחלקו בהם, וזה סעיף 3 למעלה, שנכנסים אליו בבחירה שלכם. אם תשתפו פריט בקישור, למשל פגישה, הפריט הזה מועלה אל getroutines.ai כדי שהקישור יוכל להציג אותו; פגישה משותפת כוללת את הכותרת, המשתתפים, הסיכומים והתמלול שלה. זו הטענה שהפוסט הזה באמת עוסק בה, והיא טענה על פורמט ומיקום, לא על חסינות מפריצה.
  • אנחנו מריצים עוזר שיכול לפעול. הוא יכול להביא דף אינטרנט שמפנים אותו אליו, להגיע לשירותים דרך שערים כשאתם מוסיפים מפתחות, למסור משימה ל-Claude Code אם הוא מותקן אצלכם, ואם נתתם הרשאת שליטה במחשב, למסור הוראה ל-Claude בדפדפן נתמך, שפועל על דפים תחת הכניסות שלכם. כל אחד מאלה הוא משטח יכולות. כלים רצים רק בתוך תור צ׳אט או שגרה שאתם התחלתם, ושום דבר לא רץ מעצמו: אם לא פתחתם צ׳אט או שגרת AI, שום הנחיה לא נשלחת. אבל "שום דבר לא רץ מעצמו" הוא בחירה תכנונית, לא ערובה נגד באגים.

החלק שקורא יכול להשתמש בו

אם אתם מעריכים אפליקציות AI שולחניות, ארבע שאלות מפרידות בין הארכיטקטורה לשיווק. אף אחת מהן לא דורשת מכם לסמוך על תשובה שאינכם יכולים לבדוק.

  1. אחרי שאבטל, איזה קובץ יישאר בידי, ומה פותח אותו?
  2. אם מישהו יגנוב לי את טוקן הסשן היום, מה הוא יוכל לקרוא בלי לגעת במחשב הנייד שלי בכלל?
  3. איפה נמצא מפתח ההצפנה במנוחה, והאם החלק של האפליקציה שמרנדר תוכן ווב יכול להגיע אליו?
  4. מה הספק פרסם על בעיית אבטחה שהייתה לו, עם תאריכים? אפליקציה עם גילוי פומבי, מתוארך ומתוקן אומרת לכם יותר מאפליקציה עם רקורד מושלם ובלי היסטוריה.

השאלה האחרונה חשובה יותר ממה שנראה. התיאור של Strix קיים כי Granola פרסמה את הצד שלה, וכשבנינו את ביקורת הפרטיות שלנו על Granola מתוך המסמכים שלה, האירוע הזה כבר היה בין דוחות האבטחה של הספק עצמו, מתוארך, עם מה קרה, איך זה תוקן ומי הושפע. נבדק ב-15 בספטמבר 2026. האפליקציות שכדאי לדאוג מהן הן אלה שבהן הפוסט המקביל מעולם לא נכתב על ידי אף אחד.

שאלות נפוצות

האם Granola נפרצה?

לא, עד כמה שמישהו פרסם. חברת האבטחה Strix דיווחה על השתלטות על חשבון בלחיצה אחת באפליקציית Electron השולחנית של Granola ב-23 ביוני 2026. ‏Granola אישרה זאת בבוקר שלמחרת, פרסה ב-24 ביוני תיקון בצד השרת שהגן על המשתמשים בלי עדכון אפליקציה, תיקנה עד 26 ביוני מעקף שדווח ב-25 ביוני, והחוקרים אישרו את התיקון ב-29 ביוני. הודעת הגילוי של Granola עצמה אומרת שלא נמצאו ראיות לניצול ושאף משתמש לא נפגע. ‏Strix פרסמה את התיאור ב-5 ביולי 2026.

האם שמירת ההערות על הדיסק שלי הופכת אפליקציית AI שולחנית לבטוחה?

לא. אחסון מקומי מקטין את המקרה הגרוע ביותר, הוא לא מבטל אותו. באג שמגיע לחלון מורשה על ה-Mac שלכם עדיין יכול לקרוא כל מה שהחלון הזה יכול להגיע אליו, כולל מפתח הצפנה במנוחה אם המפתח מיוצא לתוך ה-JavaScript של האפליקציה. מה שאחסון מקומי בלבד משנה הוא התקרה: מחשב נייד גנוב הוא אירוע אחד, בעוד שטוקן סשן גנוב של חשבון מסונכרן יכול לחשוף כל פגישה שהחשבון אי פעם הקליט, מכל דפדפן.

מה Routines שולחת מחוץ ל-Mac שלי?

בנתיב ברירת המחדל, הנחיה של צ׳אט או של שגרה עוברת מה-Mac שלכם אל getroutines.ai ומשם אל Anthropic תחת המפתח שלנו, ואנחנו שומרים את מספר הטוקנים ואת העלות, אף פעם לא את ההנחיה ולא את התשובה. אודיו של פגישות זורם אל Deepgram לתמלול, והכתבה היא מסלול אודיו שני שזורם אל Deepgram בזמן שאתם מדברים, בכל תוכנית. הוסיפו מפתח API משלכם, היכנסו עם ChatGPT, או חברו את Claude Code, ואין שרת של Routines במסלול. שום הנחיה לא נשלחת אלא אם פתחתם צ׳אט או שגרת AI, ואפליקציה מחוברת עדיין בודקת מול השרתים שלנו את ההרשאות שלה בערך כל עשר דקות, ומביאה מ-GitHub קובץ שחרור ציבורי זמן קצר אחרי ההפעלה וכל שש שעות כדי לבדוק אם קיים עדכון. הרשימה המלאה, כולל היכן נשמרים אסימוני המחברים, נמצאת בדף השקיפות שלנו.

מה כדאי לשאול לפני שסומכים על אפליקציית AI שולחנית עם ההערות שלי?

ארבע שאלות. אחרי שתבטלו, איזה קובץ יישאר בידכם ומה פותח אותו? אם מישהו יגנוב את טוקן הסשן שלכם, מה הוא יוכל לקרוא בלי לגעת במחשב הנייד שלכם? איפה נמצא מפתח ההצפנה במנוחה, והאם החלק של האפליקציה שמרנדר תוכן ווב יכול להגיע אליו? ומה הספק פרסם, עם תאריכים, על בעיית אבטחה שהייתה לו? גילוי פומבי, מתוארך ומתוקן אומר לכם יותר מרקורד נקי בלי היסטוריה.

קריאה נוספת

פוסטים קשורים

נסו את זה על ה-Mac שלכם.

Routines שומרת את ההערות, התמלולים והפלטים של השגרות שלכם כקבצי markdown וב-SQLite על המחשב שלכם, והם נשארים שם אלא אם תפעילו את Cloud Sync או תשתפו אחד מהם בקישור.

הורדה