В настоящее время я оцениваю безопасность мобильного приложения и только что использовал MobSF для сканирования файла APK на наличие уязвимостей. Фрагмент кода ниже помечен сканером как небезопасный из-за «небезопасной реализации SSL. Доверие ко всем сертификатам или принятие самозаверяющих сертификатов является критической дырой в безопасности. Это приложение уязвимо для атак MITM. CVSS V2: 7.4 (высокая) CWE: CWE-295 - Неправильная проверка сертификата OW ASP Топ 10: M3: Небезопасная связь OW ASP MASVS: MSTG-NETWORK-3 "
Я именно то, что, в частности, заставляет сканер думать, что Приложение доверяет всем сертификатам.
package j.m0.i.h;
import android.net.SSLCertificateSocketFactory;
import android.os.Build;
import h.i.c.g;
import h.m.f;
import j.b0;
import j.m0.i.b;
import java.util.List;
import javax.net.SocketFactory;
import javax.net.ssl.SSLParameters;
import javax.net.ssl.SSLSocket;
import kotlin.TypeCastException;
public final class b implements h {
public final SSLCertificateSocketFactory a;
public b() {
SocketFactory socketFactory = SSLCertificateSocketFactory.getDefault(10000);
if (socketFactory != null) {
this.a = (SSLCertificateSocketFactory) socketFactory;
return;
}
throw new TypeCastException("null cannot be cast to non-null type android.net.SSLCertificateSocketFactory");
}
public String a(SSLSocket sSLSocket) {
if (sSLSocket != null) {
String applicationProtocol = sSLSocket.getApplicationProtocol();
if (applicationProtocol != null && !g.a((Object) applicationProtocol, (Object) "")) {
return applicationProtocol;
}
return null;
}
g.a("sslSocket");
throw null;
}
public boolean b(SSLSocket sSLSocket) {
if (sSLSocket != null) {
String name = sSLSocket.getClass().getName();
g.a((Object) name, "sslSocket.javaClass.name");
return f.b(name, "com.android.org.conscrypt", false, 2);
}
g.a("sslSocket");
throw null;
}
public void a(SSLSocket sSLSocket, String str, List<? extends b0> list) {
if (sSLSocket == null) {
g.a("sslSocket");
throw null;
} else if (list != null) {
this.a.setUseSessionTickets(sSLSocket, true);
SSLParameters sSLParameters = sSLSocket.getSSLParameters();
g.a((Object) sSLParameters, "sslParameters");
Object[] array = j.m0.i.g.f5034c.a(list).toArray(new String[0]);
if (array != null) {
sSLParameters.setApplicationProtocols((String[]) array);
sSLSocket.setSSLParameters(sSLParameters);
return;
}
throw new TypeCastException("null cannot be cast to non-null type kotlin.Array<T>");
} else {
g.a("protocols");
throw null;
}
}
public boolean a() {
b.a aVar = j.m0.i.b.f5017h;
return j.m0.i.b.f5015f && Build.VERSION.SDK_INT >= 29;
}
}