Home Markdown Parser
Post
Cancel
Preview Image

Markdown Parser

Source Code Analysis

  • markdown.js
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    
      function parseMarkdown(markdownText) {
          const lines = markdownText.split('\n');
          let htmlOutput = "";
          let inCodeBlock = false;
    	
          lines.forEach(line => {
              if (inCodeBlock) {
                  if (line.startsWith('```')) {
                      inCodeBlock = false;
                      htmlOutput += '</code></pre>';
                  } else {
                      htmlOutput += escapeHtml(line) + '\n';
                  }
              } else {
                  if (line.startsWith('```')) {
                      language = line.substring(3).trim();
                      inCodeBlock = true;
                      // add class to code block for syntax highlighting
                      htmlOutput += '<pre><code class="language-' + language + '">';
                  } else {
                      line = escapeHtml(line);
                      line = line.replace(/`(.*?)`/g, '<code>$1</code>');
    

    Vulnerability Details:

    • It is possible to inject XSS code on the same line as the triple backtick
    • In markdown the triple backticks, is used to start a code block. After the 3 backticks, it is used to declare the language that resides in the code block. Since no input sanitization is done, we can inject xss there

Solution

This post is licensed under CC BY 4.0 by the author.

Grey CTF Survey

Beautiful Styles

Comments powered by Disqus.