Как определить, какая зависимость вызывает в Google Play предупреждение OpenSSL?

В настоящее время я работаю над большим унаследованным проектом и пытаюсь исправить проблему уязвимости OpenSSL, как описано в разделе Как устранить уязвимости OpenSSL в ваших приложениях.

Проблема в том, что существует множество зависимостей, некоторые из них с открытым исходным кодом (я обновил все, что не нарушало совместимость), добавленные как импорт Gradle, некоторые из них являются пользовательскими / закрытыми исходными кодами, предоставленными партнерами и подрядчиками компании, в которой я работаю, и прикрепленной к проекту в качестве JAR.

Есть ли способ точно определить конкретную библиотеку, которая имеет эту уязвимость? Я использовал скрипт bash, представленный в предупреждающем сообщении Google Play и OpenSSL, и он указывает на одну нативную зависимость (фактически файл.so). Есть ли возможность точно определить фактическую зависимость оттуда?

1 ответ

Решение

Есть ли возможность точно определить фактическую зависимость оттуда?

Да, но вам нужно знать версию OpenSSL, которая вас обидела, и вам нужно grep, Windows find не буду делать

Во-первых, обратите внимание на оскорбительную версию OpenSSL. Ради аргумента, скажем, что из-за OpenSSL 1.0.1h,

Затем соберите список ваших зависимостей и их папок верхнего уровня. Ради аргумента, скажи $HOME/Desktop/aosp-app, $HOME/sdk-a, /usr/local/sdk-b а также /opt/local/sdk-c,

Наконец, для каталогов верхнего уровня:

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

Вам не нужно grep -iR, который является регистронезависимым (-i) рекурсивный (-R) поиск. Вам также не нужно grep -IR, который является рекурсивным (-R) поиск, который пропускает двоичные файлы (-I).

Все это работает, потому что библиотека OpenSSL встраивает свою версию в раздел данных в виде строки. В конце концов вы столкнетесь с преступником, который, вероятно, является SDK, который поставляется предварительно собранным как общий объект, но включает в себя OpenSSL в качестве статической библиотеки. Один SDK, кажется, часто идентифицируется, и он использует cURL, который построен на основе статической библиотеки OpenSSL.


Если у вас есть файлы JAR и вы подозреваете их, в качестве быстрого теста вы можете выполнить следующее:

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

Команда будет смотреть в каталоге <dir> и его подкаталоги. Он будет искать файлы с *.jar расширение. Когда он найдет один, он будет работать grep на нём ищем нить. find сделаю это для каждого *.jar это находит.

Другие вопросы по тегам