Summary This PR fixes XSS vulnerabilities by sanitizing unsafe HTML rendering paths: Replaced unsafe [v-html](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html)/[innerHTML](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) rendering with [v-dompurify-html](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) in captain assistant UI components Sanitized signup terms HTML before rendering in the signup form Added server-side markdown sanitization in [chatwoot_markdown_renderer.rb](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) before marking HTML safe Added regression coverage for markdown XSS sanitization. Changed files [MessageList.vue](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) [ScenariosCard.vue](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) [Index.vue](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) [Form.vue](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) [chatwoot_markdown_renderer.rb](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) [chatwoot_markdown_renderer_spec.rb](vscode-file://vscode-app/c:/Users/gurji/AppData/Local/Programs/Microsoft%20VS%20Code/e7fb5e96c0/resources/app/out/vs/code/electron-browser/workbench/workbench.html) Testing bundle exec rspec spec/lib/chatwoot_markdown_renderer_spec.rb Optional frontend validation by building the dashboard and confirming the updated components render safely without unsafe HTML injection paths. --------- Co-authored-by: Sivin Varghese <64252451+iamsivin@users.noreply.github.com> Co-authored-by: Sony Mathew <sony@chatwoot.com> Co-authored-by: Sony Mathew <2040199+sony-mathew@users.noreply.github.com>
21 lines
638 B
Ruby
21 lines
638 B
Ruby
module MarkdownRendererUrlSanitizer
|
|
# Match CommonMarker's native safe renderer while retaining application protocols such as mention://.
|
|
DANGEROUS_URL_PATTERN = /\A(?:javascript:|vbscript:|file:|data:)/i
|
|
SAFE_DATA_IMAGE_PATTERN = %r{\Adata:image/(?:png|gif|jpeg|webp)}i
|
|
|
|
def link(node)
|
|
out('<a href="', sanitized_href(node.url), '"')
|
|
out(' title="', escape_html(node.title), '"') if node.title.present?
|
|
out('>', :children, '</a>')
|
|
end
|
|
|
|
private
|
|
|
|
def sanitized_href(url)
|
|
url = url.to_s
|
|
return '' if url.match?(DANGEROUS_URL_PATTERN) && !url.match?(SAFE_DATA_IMAGE_PATTERN)
|
|
|
|
escape_href(url)
|
|
end
|
|
end
|