Демонстрация уязвимостей printf или __android_log_print с Android NDK - PullRequest
0 голосов
/ 28 марта 2019

Я заинтересован в демонстрации printf уязвимостей через приложение NDK. Чтобы было ясно, я знаю, что для входа в консоль мы можем использовать __android_log_print(ANDROID_LOG_DEBUG, "LOG_TAG", "Print : %d %s",someVal, someStr);. Я попробовал это, и я знаю, что это работает. Но я явно хочу продемонстрировать уязвимости printf(), в частности использовать спецификатор %n для записи в указанное место.

Есть ли способ заставить printf() работать с этим эффектом, или это возможно сделать через __android_log_print()? Я попытался сделать это с заголовком android/log.h, но это не сработало.

Я могу заставить приложение аварийно завершить работу, выполнив что-то вроде printf(%s%s%s%s%s%s%s%s%s%s). Но опять же, я не могу манипулировать указателями.

Для общих знаний, почему printf() не работает в первую очередь и как __android_log_print() предотвращает эти подвиги?

Ответы [ 2 ]

3 голосов
/ 28 марта 2019

Вы понимаете, что Android с открытым исходным кодом.

Начиная с поиска __android_log_print() и находя его: https://android.googlesource.com/platform/system/core/+/refs/heads/master/liblog/logger_write.cpp

int __android_log_print(int prio, const char* tag, const char* fmt, ...) {
  va_list ap;
  char buf[LOG_BUF_SIZE];
  va_start(ap, fmt);
  vsnprintf(buf, LOG_BUF_SIZE, fmt, ap);
  va_end(ap);
  return __android_log_write(prio, tag, buf);
}

В итоге я посмотрел: https://android.googlesource.com/platform/bionic/+/refs/heads/master/libc/stdio/vfprintf.cpp

строки 453-454:

  case 'n':
    __fortify_fatal("%%n not allowed on Android");

В коде также упоминается дополнительная безопасность через FORTIFY, которая описана в следующем сообщении в блоге:

https://android -developers.googleblog.com / 2017/04 / подкрепиться-в-android.html

0 голосов
/ 06 июня 2019

Android специально не поддерживает спецификаторы формата %n, потому что они уязвимы.

https://android.googlesource.com/platform/bionic/+/400b073ee38ecc2a38234261b221e3a7afc0498e/tests/stdio_test.cpp#328

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...