אם לשכוח את הכותרת 'פקד המטמון' או להשתמש בה לרעה, זה עלול להשפיע לרעה על אבטחת האתר ועל פרטיות המשתמשים.
כברירת מחדל, משאבים תמיד מורשים להישמר במטמון באמצעות כל סוג של מטמון.
אי-שימוש או שימוש לרעה בכותרת Cache-Control
עלולים להשפיע לרעה על אבטחת האתר ועל פרטיות המשתמשים.
כדי לקבל תגובות מותאמות אישית שברצונך להשאיר בסטטוס 'פרטי', מומלץ לבצע אחת מהפעולות הבאות:
- למנוע מתווכים לשמור את המשאב במטמון. הגדרה של
Cache-Control: private
. - מגדירים מפתח מטמון משני מתאים.
אם התגובה משתנה בגלל קובצי cookie, מה שיכול לקרות כשקובץ ה-cookie שומר פרטי כניסה, מגדירים את
Vary: Cookie
.
בהמשך אנחנו מסבירים למה זה חשוב ומגלים:
- בעיות אבטחה ופרטיות שאולי אינך מודע להן
- סוגים שונים של מטמוני HTTP ותפיסות שגויות נפוצות
- פעולות מומלצות לאתרים עם ערך גבוה
סיכוני אבטחה ופרטיות שקשורים למטמון
משאבים דולפים מנקודות חולשה ב-Spectre
נקודת החולשה ב-Spectre מאפשרת לדף לקרוא זיכרון של תהליך מערכת הפעלה. המשמעות היא שתוקפים עלולים לקבל גישה לא מורשית לנתונים ממקורות שונים. כתוצאה מכך, דפדפני אינטרנט מודרניים הגבילו את השימוש בחלק מהתכונות שלהם, למשל SharedArrayBuffer
או טיימר ברזולוציה גבוהה, בדפים עם בידוד בין מקורות.
דפדפני אינטרנט מודרניים אוכפים את מדיניות ההטמעה ממקורות שונים (COEP). כך אפשר להבטיח שמשאבים ממקורות שונים יהיו:
- משאבים ציבוריים, בקשה ללא קובצי cookie
- משאבים שמותר לשתף באופן מפורש בין מקורות, דרך CORS או הכותרת CORP
הגדרת COEP לא מונעת מתוקפים לנצל את Spectre. עם זאת, הוא מבטיח שמשאבים ממקורות שונים לא יהיו בעלי ערך לתוקפים (כשהדפדפן נטען כמשאב ציבורי) ושהם מאפשרים לשתף אותם עם התוקף (כשמשתפים אותם עם CORP: cross-origin
).
כיצד שמירת HTTP במטמון משפיעה על Spectre?
אם הכותרת Cache-Control
לא מוגדרת בצורה נכונה, תוקף עלול לבצע התקפה. למשל:
- המשאב עם פרטי הכניסה נשמר במטמון.
- התוקף טוען דף שמבודד ממקורות שונים.
- התוקף מבקש את המשאב שוב.
- המשאב
COEP:credentialless
מוגדר על ידי הדפדפן, ולכן המשאב מאוחזר בלי קובצי cookie. עם זאת, מטמון עשוי להחזיר במקום זאת את התגובה עם פרטי הכניסה. - לאחר מכן התוקף יכול לקרוא את המשאב המותאם אישית באמצעות מתקפת Spectre.
על אף שמטמון HTTP של דפדפן אינטרנט לא מאפשר למתקפה מסוג זה להתרחש בפועל, קיימים מטמון נוסף מחוץ לשליטה המיידית של הדפדפן. ייתכן שזו תהיה ההצלחה של המתקפה הזו.
תפיסות מוטעות נפוצות לגבי מטמוני HTTP
1. המשאבים נשמרים במטמון רק על ידי הדפדפן
לעיתים קרובות יש כמה שכבות של מטמון. חלק מהמטמון מיועד למשתמש יחיד, חלקם למשתמשים מרובים. חלקם נשלטים על ידי השרת, חלקם על ידי המשתמש וחלקם על ידי מתווכים.
- מטמון הדפדפן. המטמון האלה נמצא בבעלות משתמש יחיד ומיועדים לו, והם מוטמעים בדפדפן האינטרנט שלו. הם משפרים את הביצועים על ידי הימנעות מאחזור אותה התשובה מספר פעמים.
- שרת proxy מקומי. יכול להיות שהוא הותקן על ידי המשתמש, אבל הוא יכול גם להיות מנוהל על ידי מתווכים: החברה, הארגון או ספק האינטרנט שלו. לעיתים קרובות, שרתי proxy מקומיים שומרים תגובה יחידה עבור מספר משתמשים, ומהווים מטמון 'ציבורי'. לשרתי proxy מקומיים יש תפקידים מרובים.
- מטמון של שרת המקור / CDN. זה נשלט על ידי השרת. המטרה של המטמון של שרת המקור היא להפחית את העומס על שרת המקור על ידי שמירת אותה תגובה במטמון עבור מספר משתמשים. היעדים של 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.