Ivan's work&life thoughts
546 subscribers
366 photos
8 videos
3 files
104 links
Попытка забложить
@jnovikov
Download Telegram
Сегодня мне нужно было забрать немного оборудования и для этого я решил сходить поработать в другой офис.

Вижу явный плюс этого офиса
Сегодня поставились файзером.

Это было очень забавно, потому что мы пришли наводить суету - мы сказали что привиты спутником.

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

А именно: «Не, мы спутник не котируем, го вы полностью у нас провакцинируетесь» .

Про организацию:
1) На прививку можно записаться онлайн. Но фиг ты это сделаешь без местного номера социального страхования.
Fun fact, мы получим этот номер позже чем карточки ВНЖ.

2) На прививку можно записаться по телефону. Ноо я записался 2-го декабря, вчера позвонил, говорю «Ну че там с вакциной?».
«Какой вакциной?», «Странно, что вас до сих пор не пригласили, должны в течении недели, но вообще можете завтра съездить в центр за городом, там все сделать»

3) Walk-in clinics - собственно да, просто приходишь и делаешь прививку, единственная беда состоит в том, что самый близкий вариант к Дублину, где ставят обычные дозы (не бустер) находится в городе Swords, в нашем случае час на автобусе и абсолютное отстуствие там инфраструктуры для пешеходов.

Просто офигеть, нам пришлось ПЕРЕБЕГАТЬ 3(6) полосную дорогу (почти шоссе).
Но в итоге нам быстренько поставили файзера и мы поехали домой.
Держите мем, который не приняли в предложку профунктора (видимо не оч годный)
Сегодня было серенько
С Новым годом!

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

С другой стороны, я думаю что это полезный опыт сепарации, и хорошо что он был.

Про итоги года писать не буду, так как вы знаете большинство моих ачивок.

Ну и в новом году мне предстоит писать на жаве, так что себе я пожелаю крепких нервов и меньше AbstractFactory.

А вам желаю не выгорать и добиваться целей)
А может кто пояснить че там по консолям новым ?

Ну я знаю что плэйстейшена нигде нет, покупаем по талонам.

Про цены на видюхи тоже все понятно.

А вот XBOX же есть ? Или тоже дефицит ? Или все настолько привыкли к сони что не хотят брать XBOX ?
​​Помните «проблему 2000»? Оказывается, есть и «проблема 2022». В почтовых серверах MS Exchange (один из крупнейших движков для корпораций) сегодня перестала ходить почта из-за «ошибки 2022 года» или Y2K22.

Дело в том, что для обозначения версий антиспам-списков в этом почтовом сервере разработчики использовали формат 220101002. 22 — это 22-ой год, 0101 — день и месяц, 002 — внутренняя версия обновления в этот день. Проблема в том, что они хранили это длинное обозначение в формате «число», которое вмещает в себя числа не больше 2^31, то есть не больше 2 147 483 648. 21-й год в такой формат влезает, 22-й — уже нет.

Выросло поколение программистов, которое не знает, что такое «проблема 2000», Y2K, когда в конце 1999 люди закупались продовольствием и оружием в ожидании компьютерного апокалипсиса, а решением этой (компьютерной) проблемы на полном серьезе несколько лет занимались правительства всего мира. Вот душевные статьи на русской (там и про Россию есть) и английской википедиях.

На фото президент США Билл Клинтон объясняет сложные технические штуки простым человеческим языком.

С новым 2022 годом!
Кстати вот вам очевидный минус переезда - короткие выходные.

На самом деле это очень спорный минус, все-таки отдыхать 11 дней за счет работодателя кажется ок, пока ты не работодатель)

Но для меня лично проблема такая - я успел себе сбить режим за 1-3е число, а 4го пора на работу.

Обычно на НГ праздниках я успеваю сбить режим и более-менее вернуть его же к концу праздников.

Ну в общем, сегодня я еле-еле встал к daily-стэндапу.

Meh, будем исправляться.
В питонячей либе celery нашли забавную CVE, причем я тоже думал о подобной проблеме когда делал таск на кубок CTF России, и как оказывается недокрутил потенциальную CVE.

Давайте попробую рассказать про что там.

Celery - реализация очереди задач для Python. Основной функционал - возможность создавать и планировать задачи (единица исполнения кода), которые потом могут быть выполнены на другом воркере.

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

Чтобы доставить информацию о задачах на другие машины нужно использовать какое-то внешнее хранилище/брокер, например redis или rabbitmq.

Также celery позволяет хранить информацию о результатах выполнения задачи из коробки в так называемых result backend’ах. Это опять же может быть redis/memcached/бд. [1]

Вопрос, который я задал себе при составлении таска около месяца назад - «а что если мы можем повлиять на хранилище тасков (брокер) или хранилище результатов ?»

Может показаться что такое маловероятно, но достаточно популярный вариант брокера/бэкенда — redis (k-v хранилище).
При этом многие приложения могут использовать редис для кэширования или позволять пользователю хранить там свои данные.
Представить что для простоты деплоя люди будут использовать один и тот же редис для кэширования, хранения данных и celery достаточно легко.

Люди, которые интересуются безопасностью, могут быстро придумать вектор — сериализация (способ кодирования/декодирования объектов в рантайме в байты).

В питоне для сериализации есть очень мощный, но страшный инструмент — pickle. Pickle позволяет сохранить любой питоновский объект в байты, но несет by-design проблему безопасности — десериализовать можно любой объект с мета-поведением, из-за чего при десериализации может быть выполнен произвольный код. [2]

Но разработчики celery прошли этот этап. По-умолчанию в celery используется JSON сериализация. Это накладывает ограничения на объект, который вы можете положить в результат или аргумент задачи, но делает эту историю безопаснее.

Однако вы все еще можете создать свою задачу если имеете доступ к хранилищу задач. Так, если перед вызовом задачи будут какие-то проверки (например права пользователя), то вы сможете их обойти создав свою задачу.

Именно эта идея легла в основу моей задачи на кубок CTF. [3]

А теперь про CVE.

Задача может упасть с ошибкой. Если результатом выполнения задачи будет исключение (exception), то celery честно положит эксепшен в result backend (как строку в случае JSON).

Если приложение захочет получить результат упавшей задачи, то celery прочитает информацию об исключении из брокера и попытается найти/создать тип данных, который задан в строке. [4]

Если немного детальнее, то в случае JSON сериализации в строке будет модуль, тип эксепшена и сообщение.

Передаем модуль - os, тип - system, сообщение - ls.

И celery честно попытается найти модуль os, и сделать вызов конструктора/функции system с аргументом ls.

Красивое RCE.

Fix

В фиксе [5] сейчас проверяется что полученный тип является наследником exception’a и наследником класса ‘type’. Кажется звучит безопасно, но возможно супер-знатоки питона скажут что нет.

[1] https://docs.celeryproject.org/en/stable/getting-started/backends-and-brokers/index.html
[2] https://davidhamann.de/2020/04/05/exploiting-python-pickle/
[3] https://github.com/acisoru/ctfcup-21-quals/tree/main/tasks/web/json-config
[4] https://github.com/celery/celery/blob/c79d5c79c1c212b1f7e5036b7dca18568eae68de/celery/backends/base.py#L405
[5] https://github.com/celery/celery/commit/1f7ad7e6df1e02039b6ab9eec617d283598cad6b
👍18🔥1
Приехал в Москву на неделю, дел очень много оказалось.

Главным поводом был юбилей папы и желание проверить зубы.

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

Кстати, на работе на неделю дали хромбук, пока полет нормальный
Всё-таки в Москве интересный быт
На работе подарили nest mini.

Теперь у нас есть мини домашний питомец, который пока понимает только англ и умеет только в spotify/youtube music (ну или блютус)

В целом штука забавная, но понятно насколько важна локализация. Говорить «Hey google, play zemfira» очень забавно (кстати он понял).

А вот «Hey google, play anacondaz» включает мне Nicki Minaj — Anaconda, причем попытки в «band», «russian band» не работают..
А вот и сразу выдам второй пост, раз нашел минутку.

Вчера мы провели Stay ~ CTF 2022. Attack-Defence на 8 часов.

Я написал на соревнования два сервиса, один сервис был очень интересный — нужно было найти а-ля зеродэй в ONNX от Microsoft.

Второй сервис был проще и был сделан, чтобы в контесте был хотя бы один легкий сервис. Написал что-то тип биржи на джаве и плохо работал с флотами.

Если кому-то интересно, то можно посмотреть вот тут https://github.com/C4T-BuT-S4D/stay-home-ctf-2022 или попросить в комментах подробный райтап (может тогда напишу).

Из самого интересного — ощущение, что твой контент потребляют по всему миру. В плане ты знаешь что много людей (>500) из разных стран мира потратили 9 часов своего времени на что-то, что сделали вы. И это что-то было челенджем, который им понравился (судя по оценкам).

В общем-то наверное что-то такое должны чувствовать youtube-крейторы, чьи видео смотрят и комментируют разные люди по всей земле, но у нас гораздо меньше коммунити и все-таки очень интересная специфика.
🔥13👍4