Нещодавно я розповідав про Local XSS - Локальний XSS - тип Cross-Site Scripting уразливостей, що я виявив в 2006 році. А зараз розповім вам про ще один новий тип XSS, знайдений мною. Це Cross-Language Scripting, який я створив у грудні 2006 року.
Міжмовний XSS - Cross-Language Scripting - це Cross-Site Scripting уразливості в онлайн інтерпретаторах. Даний класс XSS уразливостей я створив 23.12.2006, коли виявив уразливість в онлайн інтерпретаторі CodeIDE, а 28.02.2007 я виявив подібну уразливість в своєму Perl Pas Interpreter. Дані уразливості дозволяють проводити XSS атаки на веб додаток інтерпретатор, щоб за рахунок відправлення інтерпретатору коду на мові програмування, яку він підтримує, на виході отримати JavaScript або VBScript код.
Особливості Cross-Language Scripting.
Подібні уразливості можуть мати місце лише в онлайн інтерпретаторах різних мов програмування. Всього я виявив дві подібні уразливості в MustLive Perl Pascal Programs Interpreter та в CodeIDE. Але з розвитком Інтернет, коли онлайн інтерпретаторів з’явиться більше і вони почнуть більш широко використовуватися, можуть з’явитися нові Cross-Language Scripting уразливості.
Онлайн інтерпретатори приймають від користувача програмний код (наприклад, на мові Паскаль, як у випадку мого Perl Pas Interpreter) і оброблюючи його видають результат роботи програми в браузер. І якщо змусити онлайн інтерпретатор вивести html-теги, зокрема ті, що дозволяють виконати JS/VBS код, то можна провести XSS атаку на користувача інтерпретатору.
Однією з особливостей Міжмовних XSS є те, що вони можуть обходити WAF, як серверні та клієнтські. Тому що для проведення атаки використовується програмний код деякій мові програмування, а не різні html-теги, які використовуються для проведення звичайних XSS атак.
Приклади Cross-Language Scripting.
Спочатку я знайшов подібну уразливість в CodeIDE, а пізніше в своєму Perl Pas Interpreter. Але спочатку розповім про подібний випадок в Perl Pas Interpreter, а вже потім про CodeIDE.
Perl Pas Interpreter.
Перша версія інтерпретатору v.1.0 вийшла 10.03.2006. А 24.05.2006 вийшла версія v.1.2, в який я зробив онлайн версію інтерпретатора. І з тих пір я прикладав зусилля по недопущенню в ньому XSS уразливостей (вже в версії v.1.2 був захист від reflected XSS). Але 28.02.2007 я придумав, як за допомогою Cross-Language Scripting можна обійти захист веб додатку і провести XSS. Що я виправив в той же день в версії v.1.2.9.
XSS:
Наступний код на Pascal:
write(chr(60),'script',chr(62),'alert(document.cookie)',chr(60),'/script',chr(62));
Приводив до виведення в браузері та виконанні JavaScript коду:
<script>alert(document.cookie)</script>
Тобто використовуючи різноманітні конструкції мови Pascal, можна було вивести JS/VBS код в обхід існуючих захисних фільтрів і провести XSS атаку. Для протидії даному виду XSS уразливостей потрібно застосовувати спеціальні методи.
CodeIDE.
В онлайн інтерпретаторі CodeIDE я виявив Cross-Language Scripting (про яку приватно повідомив розробнику додатку), а також виявив на сайті інтерпретатора reflected XSS, про яку вже згадував.
Дана уразливість була в JavaScript інтерпретаторі. Хоча це не зовсім міжмовна атака, коли в JS інтерпретаторі виконується JS-код, але все ж таки дана атака була спрямована на онлайн інтерпретатор та обходила захисні фільтри додатку.
XSS:
В CodeIDE не можна було дістатися до document.cookie (в них був захист), але зате можна було виконувати інші JS-команди, що можуть використовуватися для атаки. Наприклад, для редирекції:
document.location="http://websecurity.com.ua"
Таким чином можна було виконувати JS-код з числа незаборонених конструкцій мови JavaScript, без використання будь-яких тегів, а безпосередньо в інтерпретаторі.