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

Actualmente estoy trabajando en un gran proyecto heredado y tratando de solucionar el problema de vulnerabilidad OpenSSL como se explica en Cómo abordar las vulnerabilidades de OpenSSL en tus 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 empresa para la que trabajo y estoy adjunto al proyecto como JARs.

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

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

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

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

A continuación, reúna una lista de sus dependencias y sus carpetas de nivel superior. Como argumento, digamos que es $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 insensible a mayúsculas y minúsculas ( -i ) recursiva ( -R ). Tampoco necesita grep -IR , que es una búsqueda recursiva ( -R ) que omite archivos binarios ( -I ).

Todo esto funciona porque la biblioteca OpenSSL incrusta su versión en la sección de datos como una cadena. Eventualmente, llegará al culpable, que probablemente sea un SDK que viene precomstackdo como un objeto compartido, pero que incluye OpenSSL como una biblioteca estática. Parece que un SDK se identifica con frecuencia, y usa cURL, que está construido contra una biblioteca estática de OpenSSL.


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

 find  -name '*.jar' -exec grep -R '1.0.1h' {} \; 

El comando se verá en el directorio

y sus subdirectorios. Buscará archivos con la extensión *.jar . Cuando encuentra uno, se ejecutará grep en busca de la cadena. find lo hará por cada *.jar que encuentre.