The OpenNET Project / Index page

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

В Python устранена уязвимость в реализации TLS

25.08.2023 10:33

Опубликованы корректирующие обновления языка программирования Python 3.11.5, 3.10.13, 3.9.18 и 3.8.18, в которых устранена уязвимость (CVE-2023-40217) в классе ssl.SSLSocket, позволяющая обойти стадию согласования TLS-соединения и связанные с ним процессы, такие как проверка сертификата. Успешная атака может привести к обработке незашифрованных данных так, как если бы они были переданы с использованием корректного TLS-соединения.

Проблема вызвана тем, что после создания сокета имеется небольшое окно, во время которого принятые и помещённые в буфер сокета данные будут обработаны как прочитанные от клиента, если соединение будет закрыто до того, как начнётся процесс согласования TLS-соединения. Для совершения атаки достаточно установить соединение, сразу отправить данные и закрыть сокет, не дожидаясь ответа для согласования TLS-соединения. Размер данных, который может быть отправлен в ходе атаки ограничен размером сетевого буфера.

Уязвимость затрагивает серверные приложения (например, HTTPS-серверы), использующие штатную Python-библиотеку ssl для организации защищённого канала связи, в котором применяется аутентификация по клиентским сертификатам (например, mTLS). Уязвимость может использоваться только для отправки данных в обход аутентификации по сертификатам - так как соединение сразу закрывается, ответ на запрос не будет отправлен клиенту. При этом уязвимость вполне может применяться для атак на API, через которые можно внести изменения или удалить данные.

Уязвимость также может быть использована для атаки на клиентов, подключаемых к контролируемому атакующими серверу, если эти клиенты сразу переходят к чтению данных из сокета, без предварительной отправки запроса (обычные клиентские приложения, такие как pip, которые используют HTTPS для отправки запросов, уязвимость не затрагивает).

Кроме того, в ветке Python 3.11 устранена ещё одна уязвимость (CVE-2023-41105), позволяющая обойти проверки допустимых файловых путей, выполняемые с использованием функции os.path.normpath(). Уязвимость вызвана тем, что если в пути присутствуют символы с нулевым кодом ('\0'), то функция os.path.normpath() обрезает путь после первого нулевого символа. При этом в последующих функциях работы с файлами может использоваться полный, а не обрезанный путь. Проблема проявляется только в ветке 3.11.x, т.е. код на базе os.path.normpath(), корректно блокирующий недопустимые пути при выполнении в Python 3.10.x, можно обойти при выполнении этого кода в Python 3.11.x.

  1. Главная ссылка к новости (https://discuss.python.org/t/p...)
  2. OpenNews: Опубликован план избавления CPython от глобальной блокировки интерпретатора
  3. OpenNews: Выпуск языка программирования Python 3.11
  4. OpenNews: Уязвимость в Python, позволяющая вызвать системные команды из изолированных скриптов
  5. OpenNews: В 3.6% протестированных Python-репозиториев выявлены ошибки, связанные с пропущенными запятыми
  6. OpenNews: Уязвимость в Python, проявляющаяся при обработке непроверенных дробных чисел в ctypes
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/59660-python
Ключевые слова: python, tls, ssl
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (33) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.3, Анонин (?), 11:21, 25/08/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –8 +/
    О... дыряшка и ее дефективные нультерминированные строки будет еще годами портить жизнь людям...
     
     
  • 2.5, Аноним (5), 11:49, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +4 +/
    Зато все ненавидят Паскаль и его строки с явно указанной длинной и даже не вспоминают, что мода на нультерминирование пошла в какие-то древние времена ДОСа, когда модно было писать программы в стиле "Пока не ноль посылать символ в консоль", а сейчас это наоборот тупая трата времени, т.к. каждый раз приходится сначала считать длину строки, а только потом ее обрабатывать.
     
     
  • 3.6, Анонин (?), 11:58, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Какой дос? Это пошло еще с PDP-10/11, а это на минуточку 1970е!
     
     
  • 4.7, Аноним (5), 12:04, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Сорян, я не застал PDP, я помню только ДОС с его бакстерминатед строками. Смысл в том, что тот, кто придумывал Си, очень сильно заморачивался по поводу оптимизации, но проблема в том, что в итоге оказалось, что в среднем это приводило только к ухудшению производительности, т.к. например на один случай, когда оставленные в стеке параметры действительно оказывались нужны, приходилось 10 случаев, когда операция "sub [e|r]sp, n" оказывалась тупо лишней.
     
  • 4.9, Аноним (5), 12:09, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    Ой, add конечно. Стек же у нас на PC вверх растет.
     
  • 3.17, анон (?), 14:43, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    кроме строк с терминатором в виде нуля во всех языках, наверно, есть функции читающие строку, где эта функция ждет символ новой строки.
     
     
  • 4.20, Анонин (?), 14:59, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Конечно есть. В с++ есть std::getline, в расте stdin().read_line.
    Только наличие таких функций не значит, что строки в этих языках null-terminated.
    getline возвращает нормальный std::string, read_line изменяет String.

    Да, и там, и там есть null-terminated.
    И по странному стечению обстоятельств они называются CString или как-то похоже.

     
     
  • 5.39, Аноним (39), 13:28, 26/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Раст и С++, это языки с слишком сложной реализацией, в этом их недостаток. Язык программирования с нуль-терминированной строкой - единственно правильный путь.
     
     
  • 6.59, Аноним (59), 17:29, 08/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Паскаль - язык с очень простой реализацией, но в нём есть нормальные строки
     
  • 2.8, User (??), 12:08, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Ну да, дьявол явно довольно потирал руки в тот момент, когда предлагал отцам-основателям сиё техническое решение. По масштабу порожденных проблем не знаешь, с чем и сравнить - разве что с идеей использовать "=" для присваивания...
     
     
  • 3.14, Аноним (14), 14:27, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • –1 +/
    А чем не естесственно использовать "=" для присваивания? Это же соответсвует написанию математических формул.
     
     
  • 4.16, Анонимусс (?), 14:34, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Да, но в математике оно не приводит к непредсказуемым результатам.
    А в программировании if (myNumber = 42) может отстрелить ногу. Yoda conditions придумали не просто так.
    И по хорошему эти понятия нужно было максимально визуально оделить.
     
     
  • 5.18, анон (?), 14:46, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Тут скорее тогда проблема не с символом присвоения, а с символом сравнения. И на этот счет есть правило - переменная всегда должна быть справа при сравнении. В яп с неизменяемыми данными это проблема стоит менее просто.
     
     
  • 6.19, Анонимусс (?), 14:50, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > переменная всегда должна быть справа при сравнении

    но оно работает только с константами
    если у тебя сравниваются A и B, то все будет так же плохо))

     
  • 6.24, Вы забыли заполнить поле Name (?), 00:05, 26/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Просто присвоение не должно работать в выражениях. В питоне, кстати, так и есть.
     
     
  • 7.57, Аноним (57), 18:24, 05/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Моржовый оператор := с вами не согласен
     
     
  • 8.58, Вы забыли заполнить поле Name (?), 01:44, 07/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Ну это отдельный оператор Обычное в выражениях не работает ... текст свёрнут, показать
     
  • 5.23, Вы забыли заполнить поле Name (?), 23:53, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Yoda conditions придумали не просто так

    Йода не поможет никак если слева будет переменная

     
  • 5.47, Аноним (47), 03:58, 28/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    > А в программировании if (myNumber = 42) может отстрелить ногу. Yoda conditions
    > придумали не просто так.

    Ну да. Антибаг. if (42 = myNumber) как минимум в сишке провалится с треском. Стандартная практика там где это важно. Впрочем сейчас как минимум в сях на вон то компилеры норовят варнинг кинуть и без этого. Чтоб неповадно так делать было.

    > И по хорошему эти понятия нужно было максимально визуально оделить.

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

     
  • 4.21, Аноньимъ (ok), 15:39, 25/08/2023 [^] [^^] [^^^] [ответить]  
  • +7 +/
    Не соответствует.
    В математике а = в + с не означает (взять значения в и с, сложить их, и записать результат а)

    = в математике утверждение, а не последовательность действий.

     
  • 4.56, Котофалк (?), 15:39, 04/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    Не соответствует по большей части.

    a = 1; a = 2; a = b; совершенно корректная запись в программировании и по большей части бессмыслица с т.з. математики.  a = f(x) в математике прекрасно существует при неопределённом x, в программировании - по большей части нет. 42 = а и a = 42 в математике эквивалентны, в программировании сразу встаёт вопрос это про сравнение или про присвоение. Короче, паскалевское := больше не кажется глупостью. Ещё внезапно понимаешь зачем в некоторых языках let, но решая идеологическую проблему, let создаёт не сильно-то оправданную многословность и некрасив чисто технически. Да и в целом - изрядная часть математики это про преобразования с сохранением равенства (или в более общем смысле - условия), программирование это про вычисление значений.

     
  • 2.36, Аноним (36), 07:40, 26/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    А при чём тут сам язык? Ведь это просто набор функций из библиотеки. Возьмите другую библиотеку и строка уже выглядит так
    typedef struct
    {
      gchar *str;     // Pointer to the actual string data
      gsize len;      // Current length of the string
      gsize allocated_len; // Total allocated memory for the string
    } GString;
     
     
  • 3.43, Вы забыли заполнить поле Name (?), 20:57, 26/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > А при чём тут сам язык? Ведь это просто набор функций из
    > библиотеки. Возьмите другую библиотеку и строка уже выглядит так

    Ну вот в каждой библиотеке будет своя строка. Разве это хорошо?

     
     
  • 4.45, Аноним (36), 10:18, 27/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    таки да хорошо. С - это низкоуровневый язык. где-то нужны тяжелые строки где-то достаточно нул-терминированных. какие надо такими и пользуетесь. А если не надо то берете тот же питон или ноду и вперёд ))
     
  • 3.46, Аноним (47), 01:54, 28/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А два разных размера там зачем? Чтобы можно было по неинициализированой памяти при случае покататься, как раз устроив HeartBleed какой лишний раз? :)
     
     
  • 4.50, anonymous (??), 10:10, 29/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    чтобы не перевыделять память при каждом добавлении символа в строку. в с++ строки выглядят примерно так же.
     

  • 1.37, Аноним (37), 08:37, 26/08/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • –1 +/
    Беда конечно в Python c шифрованием столько развели библиотек и все они то устаревают то обновляют их чем-то ... ошущещние какого-то бардака...
     
     
  • 2.48, User (??), 07:41, 28/08/2023 [^] [^^] [^^^] [ответить]  
  • +2 +/
    openssl, boringssl, libressl, wolfssl, polarssl(mbedtls?), gnutls - это конечно же другое :)
     
     
  • 3.52, Аноним (52), 14:34, 30/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    А что не так делай:

    '''
    import openssl as ssl
    '''
    и всего делов, но вот зоопарк в виде

    PyCrypt, PyAesCrypt, Crypt, Cryptodome и т.д. вот что на самом деле раздражает,
    так как нет понимания что и куда уходит корнями.

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

    И не было бы проблемы если бы все это худо бедно работало, но проблема не в этом,
    а в том что авторы просто забивают и ты берешь программу, а в ней используеться брошенная
    библиотека и все тебя устраивает, но нужно искать замену и патчить программу и все это на уровне
    чуть ли не пеереписать все.

     
     
  • 4.54, User (??), 16:25, 30/08/2023 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    > Все эти пристроечки, которые даже непонятно куда идут в какую библиотеку или
    > даже сами
    > реализуют полторы функции.
    > И не было бы проблемы если бы все это худо бедно работало,
    > но проблема не в этом,
    > а в том что авторы просто забивают и ты берешь программу, а
    > в ней используеться брошенная
    > библиотека и все тебя устраивает, но нужно искать замену и патчить программу
    > и все это на уровне
    > чуть ли не пеереписать все.

    Да хрен там плавал. openssl в базовой библиотеке нет - вместо него есть crypt, который deprecated и будет removed, переписывайте код под hashlib, aesчего-тотам с чем-то там и ваще. И да, под винду pyopenssl не то, чтобы везде-и-всюду нормально протащить можно. Г*но, г*но, ничего кроме г*на(Ц)

     
  • 2.55, Аноним (55), 10:16, 04/09/2023 [^] [^^] [^^^] [ответить]  
  • +/
    > Беда конечно в Python c шифрованием столько развели библиотек и все они то устаревают то обновляют их чем-то ... ошущещние какого-то бардака...

    Так и название репозитория намекает. Можно Конду взамен пробовать, может там коллекционеры более адекватные. Не довелось понять.

    А сам язык получился хороший.

     

  • 1.51, СвидетельСвидетеляЛюбви (?), 17:40, 29/08/2023 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Интересно, все эти диалоги выше кто-то заранее придумывает?
     
     
  • 2.53, Аноним (52), 14:35, 30/08/2023 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Закусывать надо...
     

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



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

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