קטגוריה ב-OWASP: MASVS-CODE: איכות הקוד
סקירה כללית
ההטמעה של HostnameVerifier
אחראית לאימות ששם המארח באישור של השרת תואם לשם המארח של השרת שהלקוח מנסה להתחבר אליו.
יישום לא מאובטח של HostnameVerifier באפליקציה ל-Android הוא יישום שלא מאמת כראוי את שם המארח של השרת שאיתו האפליקציה מתקשרת. כך תוקף יכול להתחזות לשרת לגיטימי ולהטעות את האפליקציה לשלוח מידע אישי רגיש לתוקף.
נקודת החולשה הזו קיימת כי לכיתה HostnameVerifier
יש קריאות פונקציה שיכולות לדלג על אימות שם המארח של אישור X.509, ובמקום זאת רק לאמת את הגיבוב של האישור. יש טעות נפוצה לגבי הפונקציה SSLSession#isValid
, שרבים סבורים שהיא מבצעת פעולה שקשורה לאבטחה. בפועל, המטרה שלה היא רק לבדוק אם הסשן תקף וזמין להמשך או להצטרפות. אף אחת מהפעולות האלה לא מאמתת את האבטחה של הסשן. הכיתה HostnameVerifier הוחלפה על ידי NetworkSecurityConfig.
השפעה
הטמעות לא בטוחות של HostnameVerifier עלולות להוביל לנקודות חולשה שאפשר להשתמש בהן כדי לבצע התקפות MiTM (אדם בתווך) על תעבורת הנתונים ברשת מאפליקציית הקורבן. ההשפעה של ניצול הקוד הלא מאובטח הזה היא שנתוני הרשת של האפליקציה של המשתמש עלולים להיחשף למתקפות על הרשת (מרחוק או באופן מקומי) אם הקוד הזה יופעל. ההשפעה תלויה בתוכן של תעבורת הנתונים ברשת שנחשפה בטעות (פרטים אישיים מזהים (PII), מידע פרטי, ערכים רגישים של סשנים, פרטי כניסה לשירות וכו').
פעולות מיטיגציה
מומלץ להשתמש בקובץ NetworkSecurityConfig.xml כדי לוודא שכל החיבורים של שלבי הייצור, הבדיקה, ניפוי הבאגים והפיתוח מטופלים כראוי, במקום להשתמש בקוד מותאם אישית לאימות אישורי TLS/SSL או להטמיע אותו.
משאבים
- מסמכי תיעוד של הגדרות אבטחת הרשת
- הבדיקה הזו מחפשת יישומים של HostnameVerifier שבהם שיטת האימות תמיד מחזירה את הערך true (כך שהמערכת תאמין לכל שם מארח)
- מסמכי תיעוד למפתחים בנושא הכיתה HostnameVerifier
- הקלאס AllowAllHostnameVerifierDetector ב-Android