HostnameVerifier לא בטוח
קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
קטגוריה ב-OWASP: MASVS-CODE: איכות הקוד
סקירה כללית
ההטמעה של HostnameVerifier
אחראית לאימות ששם המארח באישור של השרת תואם לשם המארח של השרת שהלקוח מנסה להתחבר אליו.
יישום לא מאובטח של HostnameVerifier באפליקציה ל-Android הוא יישום שלא מאמת כראוי את שם המארח של השרת שאיתו האפליקציה מתקשרת. כך תוקף יכול להתחזות לשרת לגיטימי ולהטעות את האפליקציה לשלוח מידע אישי רגיש לתוקף.
נקודת החולשה הזו קיימת כי לכיתה HostnameVerifier
יש קריאות פונקציה שיכולות לדלג על אימות שם המארח של אישור X.509, ובמקום זאת רק לאמת את הגיבוב של האישור. יש טעות נפוצה לגבי הפונקציה SSLSession#isValid
, שרבים סבורים שהיא מבצעת פעולה שקשורה לאבטחה. בפועל, המטרה שלה היא רק לבדוק אם הסשן תקף וזמין להמשך או להצטרפות. אף אחת מהפעולות האלה לא מאמתת את האבטחה של הסשן. הכיתה HostnameVerifier הוחלפה על ידי NetworkSecurityConfig.
השפעה
הטמעות לא בטוחות של HostnameVerifier עלולות להוביל לנקודות חולשה שאפשר להשתמש בהן כדי לבצע התקפות MiTM (אדם בתווך) על תעבורת הנתונים ברשת מאפליקציית הקורבן. ההשפעה של ניצול הקוד הלא מאובטח הזה היא שנתוני הרשת של האפליקציה של המשתמש עלולים להיחשף למתקפות על הרשת (מרחוק או באופן מקומי) אם הקוד הזה יופעל. ההשפעה תלויה בתוכן של תעבורת הנתונים ברשת שנחשפה בטעות (פרטים אישיים מזהים (PII), מידע פרטי, ערכים רגישים של סשנים, פרטי כניסה לשירות וכו').
פעולות מיטיגציה
מומלץ להשתמש בקובץ NetworkSecurityConfig.xml כדי לוודא שכל החיבורים של שלבי הייצור, הבדיקה, ניפוי הבאגים והפיתוח מטופלים כראוי, במקום להשתמש בקוד מותאם אישית לאימות אישורי TLS/SSL או להטמיע אותו.
משאבים
דוגמאות התוכן והקוד שבדף הזה כפופות לרישיונות המפורטים בקטע רישיון לתוכן. Java ו-OpenJDK הם סימנים מסחריים או סימנים מסחריים רשומים של חברת Oracle ו/או של השותפים העצמאיים שלה.
עדכון אחרון: 2025-07-26 (שעון UTC).
[[["התוכן קל להבנה","easyToUnderstand","thumb-up"],["התוכן עזר לי לפתור בעיה","solvedMyProblem","thumb-up"],["סיבה אחרת","otherUp","thumb-up"]],[["חסרים לי מידע או פרטים","missingTheInformationINeed","thumb-down"],["התוכן מורכב מדי או עם יותר מדי שלבים","tooComplicatedTooManySteps","thumb-down"],["התוכן לא עדכני","outOfDate","thumb-down"],["בעיה בתרגום","translationIssue","thumb-down"],["בעיה בדוגמאות/בקוד","samplesCodeIssue","thumb-down"],["סיבה אחרת","otherDown","thumb-down"]],["עדכון אחרון: 2025-07-26 (שעון UTC)."],[],[],null,["# Unsafe HostnameVerifier\n\n\u003cbr /\u003e\n\n**OWASP category:** [MASVS-CODE: Code Quality](https://mas.owasp.org/MASVS/10-MASVS-CODE)\n\nOverview\n--------\n\nThe [`HostnameVerifier`](/reference/javax/net/ssl/HostnameVerifier#verify(java.lang.String,%20javax.net.ssl.SSLSession)) implementation is responsible for verifying that the\nhostname in the server's certificate matches the hostname of the server that the\nclient is trying to connect to.\n\nAn unsafe HostnameVerifier implementation in an Android application is an\nimplementation that does not properly verify the hostname of the server with\nwhich the application is communicating. This can allow an attacker to\nimpersonate a legitimate server and trick the application into sending sensitive\ndata to the attacker.\n\nThis vulnerability exists because the `HostnameVerifier` class has function\ncalls that can skip X.509 certificate hostname validation and, instead, only\nverify the hash of the certificate. A common misconception is that the\n[`SSLSession#isValid`](/reference/javax/net/ssl/SSLSession#isValid()) function performs a security-related operation, when\nin reality its purpose is only to check if a session is valid and available for\nresuming or joining; neither of which validate the *security* of a session. The\nHostnameVerifier class has been superseded by [NetworkSecurityConfig](/training/articles/security-config).\n\nImpact\n------\n\nUnsafe HostnameVerifier implementations can lead to vulnerabilities which can be\nused to perform MiTM (Man-in-The-Middle) attacks on network traffic from the\nvictim application. The impact of exploiting this insecure code is that a user's\napplication network data can be compromised by network attackers (remotely or\nlocally) if this code is triggered. The impact is dependent on the content of\nthe network traffic being inadvertently exposed (PII, private information,\nsensitive session values, service credentials, etc).\n\nMitigations\n-----------\n\nUse the [NetworkSecurityConfig.xml](/training/articles/security-config) to ensure that all\nproduction, testing, debugging, and dev stage connections are properly handled\nrather than using or implementing custom TLS/SSL certificate validation code.\n\nResources\n---------\n\n- [Network Security Configuration Documentation](/training/articles/security-config)\n- [This check looks for implementations of HostnameVerifier whose verify method always returns true (thus trusting any hostname)](https://googlesamples.github.io/android-custom-lint-rules/checks/BadHostnameVerifier.md.html)\n- [Developer documentation for the HostnameVerifier class](/reference/javax/net/ssl/HostnameVerifier#verify(java.lang.String,%20javax.net.ssl.SSLSession))\n- [AllowAllHostnameVerifierDetector class in Android](https://cs.android.com/android-studio/platform/tools/base/+/mirror-goog-studio-main:lint/libs/lint-checks/src/main/java/com/android/tools/lint/checks/AllowAllHostnameVerifierDetector.java)"]]