‫X509TrustManager לא מאובטח

קטגוריה ב-OWASP: MASVS-CODE: איכות הקוד

סקירה כללית

המחלקות X509TrustManager אחראיות לאימות האותנטיות של שרת מרוחק. הוא עושה זאת על ידי אימות האישור של השרת.

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

הפגיעות קיימת כי השימוש במחלקה X509TrustManager,‏ Java/Android מאפשר לבטל לחלוטין את אימות השרת. למחלקה X509TrustManager יש שתי פונקציות שחשובות לנו: checkServerTrusted() ו-getAcceptedIssuers(). אפשר להגדיר את הקריאות לפונקציות כך שכל אישורי X.509 יהיו מהימנים. בנוסף, יכול להיות שיש באגים בלוגיקה של אימות מותאם אישית או שהיא לא שלמה, ולכן היא מאפשרת חיבורים לא צפויים. בכל המקרים האלה, המטרה של המחלקה בוטלה והחיבור לרשת שנוצר על סמך הפלט של X509TrustManager לא מאובטח.

השפעה

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

אמצעי צמצום סיכונים

כדי לוודא שכל החיבורים בשלבי הייצור, הבדיקה, הניפוי והפיתוח מטופלים בצורה נכונה, מומלץ להשתמש בפונקציונליות של NetworkSecurityConfig.xml במקום להשתמש בקוד אימות מותאם אישית של אישורי TLS/SSL או להטמיע אותו. אם יש צורך להשתמש באישור בחתימה עצמית בגרסאות בדיקה ובגרסאות לניפוי באגים, כדאי להשתמש ב-NetworkSecurityConfig במקום להטמיע X509TrustManager בהתאמה אישית.

משאבים