The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Предсказуемость генерации идентификаторов сессий в PHP

31.03.2010 11:37

В коде генерации номеров уникальных пользовательских сессий и уникальных идентификаторов (uniqid) PHP найдена недоработка, позволяющая злоумышленнику предсказать другие номера последовательности, зная текущий номер сессии (например, войдя на форум можно подобрать номера сессий других пользователей). Проблема вызвана некорректной инициализацией генератора случайных чисел в PHP, начальные значение затравки для которого можно предсказать с достаточно высокой степенью вероятности.

Проблеме подвержены все версии PHP, включая 5.3.2. Интересно, что при выпуске версии PHP 5.3.2 разработчики знали о существовании данной проблемы и даже изменили метод инициализации генератора случайных чисел, но то изменение по сути сводилось к добавлению предсказуемой константы, т.е. принципиально не устраняло суть проблемы, а лишь защищало от определенного эксплоита. Защита от подобного рода проблем в проекте Suhosin (защищенный вариант PHP) была добавлена начиная с версии 0.9.31, выпущенной 5 лет назад. Впервые проблема с генератором случайных чисел PHP была озвучена еще в 2001 году.

  1. Главная ссылка к новости (http://seclists.org/fulldisclo...)
  2. OpenNews: Релиз PHP 5.3.2
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/26026-php
Ключевые слова: php, security, session, random
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (14) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, terminus (ok), 11:45, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +5 +/
    php, такой php!
     
     
  • 2.12, User294 (ok), 03:25, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    Можно подумать остальные без багов. Вон в яве вагон багов вообще нашли. С выполнением кода и прочая.
     

  • 1.2, Аноним (-), 12:03, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • –2 +/
    будем юзать)
     
  • 1.3, анонимс (?), 12:24, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    юзаем давно, спасибо разработчикам что думают не только о себе
     
  • 1.4, Mariman (?), 15:44, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Ну... практического применения эта уязвимость никак не получит, поскольку чтобы реально подменить сессию нужно:
    1. угадать с точностью до миллисекунд время захода юзеря
    2. узнать точное время старта системы и обнуления этого самого счетчика
    3. знать точное количество и их время срабатывания генератора этих самых случйных чисел.

    Только в этом случае тело может "угадать" идентификатор сессии, создать у себя такую же куку и зайти в систему под этим юзерем.

    А если в сессии имеется еще какой идентификатор, например от юзер-агента браузера, то к списку еще прибавляется обязятельное знание каким браузером и какой его версией зашло тело.

    В общем, такое тело существовать не может или же оно является админом. А если, допустим, есть пароль рута (т.е. сломали), то на кой ляд нужны эти танцы с сессиями?

     
     
  • 2.5, Аноним (-), 16:16, 31/03/2010 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >1. угадать с точностью до миллисекунд время захода юзеря

    В статье же вроде про секунды написано, в этом случае угадать не так сложно, с учетом  того, что на куче форумов можно посмотреть время нахождения юзера в online.

    >2. узнать точное время старта системы и обнуления этого самого счетчика
    >3. знать точное количество и их время срабатывания генератора этих самых случйных
    >чисел.

    По выданному сессионному id можно без проблем подобрать эти параметры.


    >А если в сессии имеется еще какой идентификатор, например от юзер-агента браузера,

    Там речь про дефолтные механизмы работы с сессиями.

     
     
  • 3.13, Mariman (?), 11:25, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    мало ли что в статье... а добавили миллисекунды. и еще... как по session_id() вычислить точное время старта системы и количество генераций? ведь сайтом в этот момент пользуются еще люди... их генерации тоже надо учитывать.
    Так что это все смахивает на бред параноика.
     
  • 2.8, Timon (?), 21:13, 31/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    можно же и побрутфорсить немного :)
     
  • 2.14, Герман (??), 18:50, 06/06/2013 [^] [^^] [^^^] [ответить]  
  • +/
    http://blog.ptsecurity.com/2012/08/not-so-random-numbers-take-two.html
    не только возможно, но даже софт для этого можно скачать, с которым подбор значения session_id - меньше часа :)
     

  • 1.6, Nas_tradamus (ok), 17:19, 31/03/2010 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    Так. Во Фряхе, Убунте и Дебиане php по-дефолту ставится с Suhosin-patch, что исключает возможность такого хака. Про другие дистры не знаю.
     
     
  • 2.7, PereresusNeVlezaetBuggy (ok), 18:11, 31/03/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >Так. Во Фряхе, Убунте и Дебиане php по-дефолту ставится с Suhosin-patch, что
    >исключает возможность такого хака. Про другие дистры не знаю.

    В pkgsrc-системах (NetBSD, DragonFly BSD…) и OpenBSD тоже.

     
  • 2.9, Hety (??), 00:47, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • –1 +/
    В джэйле сухосин не работает. GG
     
     
  • 3.10, PereresusNeVlezaetBuggy (ok), 00:50, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    >В джэйле сухосин не работает. GG

    Хм. За jail не скажу, а в chroot на моих опёнковских серверах он чувствует себя прекрасно... В чём проблема с jail?

     
  • 2.11, User294 (ok), 03:22, 01/04/2010 [^] [^^] [^^^] [ответить]  
  • +/
    > что исключает возможность такого хака.

    Вот в такие моменты и появляется желание сказать спасибо майнтайнерам за то что они есть.

     
     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру