android openssl google-play-services android-security

android - ¿Cómo determinar qué dependencia causa la advertencia de Google Play OpenSSL?



google-play-services android-security (1)

Actualmente estoy trabajando en un gran proyecto heredado y estoy tratando de solucionar el problema de vulnerabilidad de OpenSSL como se explica en Cómo abordar las vulnerabilidades de OpenSSL en sus aplicaciones .

El problema es que hay muchas dependencias, algunas son de código abierto (actualicé todas las que no rompieron la compatibilidad) agregadas como importación de Gradle, algunas son de origen personalizado / cerrado proporcionadas por socios y contratistas de la compañía para la que trabajo y adjunto al proyecto como JARs.

¿Hay alguna manera de identificar una biblioteca específica que tenga esta vulnerabilidad? Utilicé el script bash provisto en el mensaje de advertencia de Google Play y OpenSSL y apunta a una dependencia nativa (en realidad el archivo .so). ¿Hay alguna opción para determinar la dependencia real desde allí?


¿Hay alguna opción para determinar la dependencia real desde allí?

Sí, pero necesita conocer la versión ofensiva de OpenSSL y necesita grep . Windows find no servirá.

Primero, tome nota de la versión ofensiva de OpenSSL. En aras de la discusión, digamos que se debe a OpenSSL 1.0.1h .

Luego, reúna una lista de sus dependencias y sus carpetas de nivel superior. En aras de la discusión, diga $HOME/Desktop/aosp-app , $HOME/sdk-a , /usr/local/sdk-b y /opt/local/sdk-c .

Finalmente, para los directorios de nivel superior:

grep -R ''1.0.1h'' "$HOME/Desktop/aosp-app" grep -R ''1.0.1h'' "$HOME/sdk-a" grep -R ''1.0.1h'' /usr/local/sdk-b grep -R ''1.0.1h'' /opt/local/sdk-c

No necesita grep -iR , que es una búsqueda entre mayúsculas y minúsculas ( -i ) recursiva ( -R ). Tampoco necesita grep -IR , que es una búsqueda recursiva ( -R ) que omite los archivos binarios ( -I ).

Todo esto funciona porque la biblioteca OpenSSL incorpora su versión en la sección de datos como una cadena. Eventualmente, se encontrará con el culpable, que probablemente sea un SDK que viene preconstruido como un objeto compartido pero incluye OpenSSL como una biblioteca estática. Un SDK parece identificarse con frecuencia, y utiliza cURL que se construye contra una biblioteca estática de OpenSSL.

Si tiene archivos JAR y sospecha de ellos , puede realizar lo siguiente como prueba rápida:

find <dir> -name ''*.jar'' -exec grep -R ''1.0.1h'' {} /;

El comando buscará en el directorio <dir> y sus subdirectorios. Buscará archivos con la extensión *.jar . Cuando encuentre uno, se ejecutará grep en busca de la cadena. find lo hará por cada *.jar que encuentre.