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

Screw you guys, i'm going home!
— Eric Theodore Cartman


Не з цього я хотів починати, та ні з такою кількістю букв, але… Розповім невелику різдвяну казку або історію, а може, навіть, і правду.

На католицьке різдво одному шалопаю Санта подарував уразливість на великому мовному ресурсі, з розряду: знаємо, що треба, але по якійсь причині заб(и|і), зразок відкритого svn, тільки XSS markdown.

Перш ніж продовжити, зроблю невеликий відступ з приводу структури статті. Я розділив на три частини: практична, опитування і філософська, а для більш читання і загадковості ще і ввів змінні:

X — мовний сервіс
H — головний X
d ∈ D — команда розробників X або просто D
S — Санта клаус, який просто засипав подарунками північнокорейських хакерів в минулому році
Z — уразливість aka подарунок aka різдвяне диво
Y — користувач якому S підніс Z

Частина перша практична
Автору не відомо з якої причини і з яких міркувань D вирішила використовувати на форумі X markdown, при цьому повністю доверевшись користувачам, може звичайно це основна частина екосистеми, може бажання догодити користувачам або може банальна лінь. Тут можливі тільки припущення, а відповідь думаю ми від них так і не дізнаємося.

Настав католицьке різдво і будучи хорошим хлопчиком у минулому році Y знайшов під ялинкою Z S, «Що за ...»,- вигукнув Y, але як і будь-яка дитина він вирішив не морочитися з приводу свого вигуку, а відразу погратися з Z X і яким було його здивування коли банальна посилання [test](javascript:alert('xss')) вивела йому «XSS». «Диво?! Подарунок!», — скажіть Ви, так це можна називати по різному і раздолбайством те ж, але дотримувався етичного хакінгу Y все таки вирішив поділитися зі своїм подарунком c D і попередити інших користувачів X про таке диво, яке могло призвести до чудес більш серйозного масштабу аж до крадіжки даних, спам або перетворення їх вычеслительного пристрою в один з вузлів чергового ботнету або гарбуз. Але із-за того що D, не відомої нам причини сховала чарівну кнопку «support», для прямого звернення до них, від російськомовного співтовариства, Y вирішив привітати їх на форумі в розділі підтримки для англомовних користувачів, залишивши їм привіт вигляді простого alert і з проханням закрити цю проблему.

Пройшли добу, Новий Рік вже стояв на порозі, але D так і не відгукнулися з приводу Z, а за цей час хлопець з Києва, використовуючи Z, доробив функціонал X, який прибрали D, але ще затребуваний користувачами, а інший користувач з Німеччини, вирішив перевірити можливість: не видимою для користувачів експлуатації Z, використовуючи onmouseover і onload на зображення. «Хм»,- сказав Y, побачивши, що його повідомлення так і не було прочитано D. «Може не туди написав», — подумав він і залишив ще одне велике повідомлення, але в російськомовної частини X про найденом подарунок, на яке відгукнулася дівчина O, розуміючи якого масштабу можуть бути чудеса використовуючи Z, вона підказала інший шлях до D, через прямі повідомлення на сторінці їх профайлу, розгорнувши повністю подарунок Z, крім привіту Y ще повісив на onmousever не велике привітання у вигляді alert, але тільки з «Happy New Year», все-таки Новий рік, дух різдва, і тільки потім написав H про Z, і о диво D відгукнулися, видаливши всі повідомлення Y на англомовній частині форуму, при цьому не зачепивши російськомовну її частину і залишивши Y банальне; Thanks c обещаением we'll fix this soon. Але Y було цього не достатньо і тоді він вирішив запитати H: «А якого D видаляли всі мої попередження", на що H мудро зауважив:«Because your post causes the browser to crash. Please stop writing these posts until we fix the problem». «А як же дух Різдва, як звичайний alert може призвести до самогубства браузера»,- запитаєте Ви, та звичайно не приємно отримати alert, але ж Happy New Year та й завжди можна закрити сторінку, але залишимо це на совісті H. Так вирішив вчинити і Y, і з почуттям виконаного обов'язку він ліг спати з надією, що завтра на X припиняться чудеса.

На календарі вже було 31 грудня, падав торішній сніг, запах мандарин і звуки прогресуючого безумства на кухні розбудило Y, його ще не остиглі обчислювальний пристрій було готове до нових подарунків, але Y все таки вирішив перевірити Z і як же він був засмучений, коли дізнався, що чудеса тривають, але так як пройшло всього 8 годин і напевно D працюють над проблемою, Y залишив ще одне привітання з наступаючим новим роком, тільки в російськомовній частині, щоб не бентежити D, у вигляді смайлика, при натисканні на який створювався б object з посиланням на кліп групи ABBA «Happy New Year». Ось що у нього вийшло в результаті:

{@id=abba}
This is *red{@style=color:red;}.*
[some text{@id=test}](javascript:%76%61%72%20%61%20%3D%20%64%6F%63%75%6D%65%6E%74%2E%63%72%65%61%74%65%45%6C%65%6D%65%6E%74%28%27%6F%62%6A%65%63%74%27%29%3B%61%2E%77%69%64%74%68%20%3D%20%34%32%30%3B%61%2E%68%65%69%67%68%74%20%3D%20%33%31%35%3B%61%2E%64%61%74%61%20%3D%20%22%2F%2F%77%77%77%2E%79%6F%75%74%75%62%65%2E%63%6F%6D%2F%65%6D%62%65%64%2F%33%55%6F%30%4A%41%55%57%69%6A%4D%22%3B%64%6F%63%75%6D%65%6E%74%2E%67%65%74%45%6C%65%6D%65%6E%74%42%79%49%64%28%22%61%62%62%61%22%29%2E%61%70%70%65%6E%64%43%68%69%6C%64%28%61%29%3B%61%6C%65%72%74%28%22%54%68%69%73%20%69%73%20%41%42%42%41%21%22%29%3B)
![test {@onclick=document.getElementById('test').click() }](http://icons.iconarchive.com/icons/rokey/popo-emotions/128/big-smile-icon.png)

Не багато відпочинемо від різдвяного оповідання і розберемо дане повідомлення, насамперед потрібен був контейнер куди б додавався тег object з посиланням на кліп, для цього основного контейнера топіка присвиваем ідентифікатор {id=abba}, не звично для атрибутів на markdown подумаєте Ви, але класичний варіант не працював {: #abba}, потім треба було кудись заховати код, але перед цим його довелося закодувати як посилання, так як парсер обробляв лапки, знаки більше і менше, після чого було обрано зображення зі смайликом і на подію onclick був повішений виклик document.getElementById('test').click(), з причини того, що парсер обробляв і прогалини.

Минуло 12 годин, але нічого не відбувалося, Z так і не був закритий, тому обурений Y вирішив залишити ще один привіт у вигляді простого тексту з попередженням, щоб користувачі менше працювали на форумі і запитав у H коли ж D вирішать проблему, але у відповідь його топік був знову видалений, а заштатне модератор попросив, щоб Y не писав про проблему і не попереджав користувачів, так як цим він нічого не доб'ється, засмучений Y почав самовыпиливаться з X, але скоро отримав повідомлення від небайдужого користувача з США, який був від частини згоден c Y і нарешті пояснив що ж означає все таки «soon», автор призведе повний текст повідомлень від небайдужого користувача, щоб нічого не висмикнути з контексту.
M: that's fascinating, I had no idea that was possible, but it definitely worked. I removed my reply because I don't want to encourage others to try it, but you're right about it being quite serious. You should report the issue to Support (with the white button on the side of the screen) and move that thread to the Troubleshooting forum so it's more likely to be seen by an admin. I'll report the issue as well.
M: i'm not part of the team, but I imagine that they don't want the vulnerability discussed because it might lead to more people trying to abuse it. For a vulnerability like this one, there's no way for users to protect themselves except to stop using the site or turn off javascript in their browsers. Neither of those are particularly «good» solutions, so in their eyes, it might be better to keep the virus «low key» until they have a fix ready. I don't necessarily agree with that reasoning, but that's what they've apparently decided.
M: Soon" doesn't necessarily mean «instantly». It's a small team though, they've only got a handful of developers and have other things to take care of too. I wrote serious about how it was in my support ticket, so hopefully that encourages them to prioritize it. It doesn't appear that the virus is very common, since it's been around for a long time and there hasn't been any attacks yet. Hopefully nothing will pop up until they can get the fix done.
Прочитавши перші повідомлення, Y видалив всі свої топіки, подарував свої тугрики зароблені під час проходження курсу євангелісту X за його російська мова (склад), відключив свій обліковий запис і приєднався до святкового столу…

Ну і в кінці цієї історії автор хотів процитувати Олександра Сергійовича Пушкіна, але не багато змінивши його нетлінні рядки: «Казка — ! брехня, та в ній натяк — добрим молодцям урок...»

Частина друга опитування
  • Як би ви привітали користувачів з наступаючим Новим Роком, використовуючи дану XSS уразливість на форумі?
  • Як би ви вчинили на місці розробників великого ресурсу дізнавшись про таку проблему перед Новим Роком, при цьому треба врахувати, що форум так само доступний і для анонімних користувачів в режимі readonly?
  • І останнє питання, де б ви поставили кому і поставили б в даному реченні: «не можна експлуатувати повідомляти».


Частина третя філософська
Про розробників
Автор не став писати про те, що про них сказав Y, інакше б визнали як скаргу, але з усього сказаного він би виділив наступний логічний ланцюжок: якщо цю проблему не можуть закрити протягом тижня, ставлять їй не високий пріоритет, про що тоді ще мовчать розробники, які чудеса можуть чекати користувачів сервісу!? І ще автор хотів би додати з цього приводу: «Shit Happens».

Про користувачів
Що більше засмутило Y з усієї цієї історії так це безграмотність користувачів, особливо в російськомовний частини форуму, на відміну від англомовний частини, де користувачі піднімали топік вгору, щоб розробники помітили, російськомовні навпаки при бажанні минусовали і всі твердили: «як навіщо, та й кому треба», та хтось скаже XSS це не серйозно, але автор порівняв її з поцілунком після якого все тільки починається, якщо звичайно не отримуєш ляпас або удар під дих.

мовні курси
Тут точно не буде скарг і нічого такого, просто автор призведе цитату Y і кілька побажань, якими б хотілося бачити курси, може це вже кимось зроблено:
Я б порівняв їх із звичайною аркадою, яка затягує, класно коли все блимає, вибухає, тобі нараховуються тугрики, підбадьорюють, на кінець спрощують завдання, коли не можеш пройти рівень і ось в кінці з'являється заставка з поздоровленням про повне проходження, ти відкладаєш джойстик, телефон, ноутбук, в твоїй голові крутиться тільки одне: «це було охренительно», але поступово ейфорія спадає і ти починаєш помічати, що уроки не зроблені, будинок не прибраний, посуд вимитий, рибка здохла, а отриманими навичками ти тільки і можеш сказати пару не пов'язаних пропозицій.
  • Чудово було б наприклад читаєш Дракулу Брема Стокера, в оригіналі, і відразу ж йде розбір конструкцій, посилання на правила і словник, а після б прочитання чергової глави давали б тест на ті чи інші правила мови, що вивчається, тоді б пропозиції як на X не виглядали б так дико і выдернутыми з контексту.
  • курси повинні підлаштовуватися, але не спрощувати завдання, а виявляти кращий спосіб подачі інформації для обучаемогу, люди різні; комусь простіше через текст, комусь простіше через мова, а кому то через зображення і так далі.
  • Ми думаємо російською, так навіщо нас змушують весь час перекладати з англійської на російську, може спочатку було б краще набити руку в зворотному перекладі з російської на англійську, а вже для поповнення словникового запасу з англійської, так звичайно є одне але переклади з російської на англійську не коштували б і цента.
  • Y згоден з Петровим що треба спочатку виділити особливості, конструкції мови, а тільки потім приступати до вивчення, це як з програмуванням два курсу нас тягають за волосся вищою математикою, теорією компіляторів, операційних систем, алгоритмами і шаблонами проектування, а потім тільки переходимо до високорівневих мов.


Висновок від автора: не довіряйте користувачам, інакше вони не будуть довіряти вам.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.