עדכון מטמון HTTP יעזור לכם לשפר את האבטחה והפרטיות

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

Arthur Sonzogni
Arthur Sonzogni

כברירת מחדל, משאבים תמיד מורשים להישמר במטמון באמצעות כל סוג של מטמון. אי-שימוש או שימוש לרעה בכותרת Cache-Control עלולים להשפיע לרעה על אבטחת האתר ועל פרטיות המשתמשים.

כדי לקבל תגובות מותאמות אישית שברצונך להשאיר בסטטוס 'פרטי', מומלץ לבצע אחת מהפעולות הבאות:

  • למנוע מתווכים לשמור את המשאב במטמון. הגדרה של Cache-Control: private.
  • מגדירים מפתח מטמון משני מתאים. אם התגובה משתנה בגלל קובצי cookie, מה שיכול לקרות כשקובץ ה-cookie שומר פרטי כניסה, מגדירים את Vary: Cookie.

בהמשך אנחנו מסבירים למה זה חשוב ומגלים:

  1. בעיות אבטחה ופרטיות שאולי אינך מודע להן
  2. סוגים שונים של מטמוני HTTP ותפיסות שגויות נפוצות
  3. פעולות מומלצות לאתרים עם ערך גבוה

משאבים דולפים מנקודות חולשה ב-Spectre

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

דפדפני אינטרנט מודרניים אוכפים את מדיניות ההטמעה ממקורות שונים (COEP). כך אפשר להבטיח שמשאבים ממקורות שונים יהיו:

  • משאבים ציבוריים, בקשה ללא קובצי cookie
  • משאבים שמותר לשתף באופן מפורש בין מקורות, דרך CORS או הכותרת CORP

הגדרת COEP לא מונעת מתוקפים לנצל את Spectre. עם זאת, הוא מבטיח שמשאבים ממקורות שונים לא יהיו בעלי ערך לתוקפים (כשהדפדפן נטען כמשאב ציבורי) ושהם מאפשרים לשתף אותם עם התוקף (כשמשתפים אותם עם CORP: cross-origin).

כיצד שמירת HTTP במטמון משפיעה על Spectre?

אם הכותרת Cache-Control לא מוגדרת בצורה נכונה, תוקף עלול לבצע התקפה. למשל:

  1. המשאב עם פרטי הכניסה נשמר במטמון.
  2. התוקף טוען דף שמבודד ממקורות שונים.
  3. התוקף מבקש את המשאב שוב.
  4. המשאב COEP:credentialless מוגדר על ידי הדפדפן, ולכן המשאב מאוחזר בלי קובצי cookie. עם זאת, מטמון עשוי להחזיר במקום זאת את התגובה עם פרטי הכניסה.
  5. לאחר מכן התוקף יכול לקרוא את המשאב המותאם אישית באמצעות מתקפת Spectre.

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

תפיסות מוטעות נפוצות לגבי מטמוני HTTP

1. המשאבים נשמרים במטמון רק על ידי הדפדפן

לעיתים קרובות יש כמה שכבות של מטמון. חלק מהמטמון מיועד למשתמש יחיד, חלקם למשתמשים מרובים. חלקם נשלטים על ידי השרת, חלקם על ידי המשתמש וחלקם על ידי מתווכים.

  • מטמון הדפדפן. המטמון האלה נמצא בבעלות משתמש יחיד ומיועדים לו, והם מוטמעים בדפדפן האינטרנט שלו. הם משפרים את הביצועים על ידי הימנעות מאחזור אותה התשובה מספר פעמים.
  • שרת proxy מקומי. יכול להיות שהוא הותקן על ידי המשתמש, אבל הוא יכול גם להיות מנוהל על ידי מתווכים: החברה, הארגון או ספק האינטרנט שלו. לעיתים קרובות, שרתי proxy מקומיים שומרים תגובה יחידה עבור מספר משתמשים, ומהווים מטמון 'ציבורי'. לשרתי proxy מקומיים יש תפקידים מרובים.
  • מטמון של שרת המקור / CDN. זה נשלט על ידי השרת. המטרה של המטמון של שרת המקור היא להפחית את העומס על שרת המקור על ידי שמירת אותה תגובה במטמון עבור מספר משתמשים. היעדים של CDN דומים, אבל הם מתפשטים ברחבי העולם ומוקצים לקבוצת המשתמשים הקרובה ביותר, על מנת לקצר את זמן האחזור.
לעיתים קרובות יש מספר שכבות של מטמון בין הדפדפן לשרת.
עשויות להיות שכבות שונות של מטמון בין הדפדפן לשרת. לדוגמה, יכול להיות שתיתקלו במטמון של שרת, ואחריו ב-CDN ובמטמון של הדפדפן. ייתכן שיש גם הגדרה מקומית של שרת proxy בין ה-CDN לבין המטמון של הדפדפן.

2. פרוטוקול SSL מונע ממתווכים לשמור משאבי HTTPS במטמון

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

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

בסופו של דבר, ייתכן שחלק ממשאבי ה-HTTPS יישמרו במטמון על ידי שרתי ה-proxy המקומיים האלה.

איך פועל מטמון HTTP

  • מותר לשמור משאבים במטמון באופן מרומז כברירת מחדל.
  • מפתח המטמון הראשי כולל את כתובת ה-URL ואת השיטה. (כתובת URL, שיטה)
  • מפתח המטמון המשני הוא הכותרות שכלולות בכותרת Vary. Vary: Cookie מציין שהתשובה תלויה ב-Cookie.
  • הכותרת Cache-Control מספקת יותר שליטה ברמת פירוט.

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

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

מומלץ לבצע את אחת מהפעולות הבאות:

  • למנוע מתווכים לשמור את המשאב במטמון. הגדרה של Cache-Control: private.
  • מגדירים מפתח מטמון משני מתאים. אם התגובה משתנה בגלל קובצי cookie, מה שיכול לקרות כשקובץ ה-cookie שומר פרטי כניסה, מגדירים את Vary: Cookie.

באופן ספציפי, כדאי לשנות את התנהגות ברירת המחדל: תמיד צריך להגדיר את Cache-Control או את Vary.

שיקולים נוספים

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

דפדפני אינטרנט מסוימים מצמצמים את ההתקפות האלה, שמפצלים את מטמון ה-HTTP בהתאם לבקשה לתגובת המשאב – פרטי כניסה או לא. החל משנת 2022, Firefox מפצל את המטמון ו-Chrome ו-Safari לא. Chrome עשוי לפצל את המטמון בעתיד. שימו לב שההתקפות האלה שונות ומשלימות פיצול לפי המקור ברמה העליונה.

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


תמונת הכותרת של בן פטינסון ב-UnFlood.