Нещодавно iDEFENISE опублікувало попередження, яке в російському перекладі може виглядати як:
Виявлено чергове переповнення буфера в Xpdf другої і третьої версії.
Воно дозволяє злоумышленику віддалено скомпрометувати систему.

Помилка викликана неправильною перевіркою допустимих меж у функції doImage(). Уразливість може бути використана для переповнення буфера при відкритті користувачем спеціально сформованого PDF-файлу.

Вдале експлуатування уразливості дозволяє виконати довільний код.

Про існування уразливості було повідомлено для версії 3.00. Але, можливо, порушені й інші версії.

Заради цікавості я провів невеликі дослідження:
Розглядалися исходники xpdf-2.01

Gfx.cc
Місцями по тексту розкидано:
————
if (++updateLevel >= 20000) {
out->dump();

————–

Функція doImage має наступні ділянки:
2260: void Gfx::doImage(Object *ref Stream *str, GBool inlineImg) {
2261: Dict *dict;
2262: int width, height;

2277: // get size
2278: dict->lookup(«Width», &obj1);
2279: if (obj1.isNull()) {… }
2285 width = obj1.getInt();

2400: if ((i = width * height) > 1000) {
2401: i = 1000;
2402: }
2403: updateLevel += i;

Де тут помилка? На перший погляд все нормально. Насправді ж,
що вийде, якщо width або heigth будуть негативними? Змінна updateLevel буде некоректно змінена, т. к. твір позитивного і негативного числа завжди менше, ніж 1000.
В результаті можливий вихід за межі пам’яті, використовуваної для формування зображення.
До речі кажучи, подібна помилка не тільки у функції doImage. Для прикладу взглятите уважно на перший рядок преведенного мною уривку коду.

Найцікавіше, що подібні перевірки в інших файлах в основному нормальні:
Навіть відповідні коментарі 😉

В якості прикладу можу вказати
XRef.cc
0583 Object *XRef::fetch(int num, int gen, Object *obj) {

0588: // check for bogus ref — this can happen in corrupted PDF files
0588: if (num = size) {
0588: obj->initNull();
0588: return obj;
0588: }

Патчі, виправляють цю помилку:
Apply patch for version 3.00:
ftp://ftp.foolabs.com/pub/xpdf/xpdf-3.00pl2.patch
Update to version 3.00pl2.
www.foolabs.com/xpdf/download.html

Нагадую, що спочатку про уразливості повідомила група iDEFENISE.
flamer4HZ
Перевіряйте частіше!