Commit 941a2d27 authored by Jacob Schatz's avatar Jacob Schatz Committed by Robert Speicher

Merge branch 'fix-comment-reflection' into 'security-9-5'

Fix Live Comment XSS Vulnerability

See merge request gitlab/gitlabhq!2183
parent bc10afb6
...@@ -1272,16 +1272,16 @@ export default class Notes { ...@@ -1272,16 +1272,16 @@ export default class Notes {
`<li id="${uniqueId}" class="note being-posted fade-in-half timeline-entry"> `<li id="${uniqueId}" class="note being-posted fade-in-half timeline-entry">
<div class="timeline-entry-inner"> <div class="timeline-entry-inner">
<div class="timeline-icon"> <div class="timeline-icon">
<a href="/${currentUsername}"> <a href="/${_.escape(currentUsername)}">
<img class="avatar s40" src="${currentUserAvatar}" /> <img class="avatar s40" src="${currentUserAvatar}" />
</a> </a>
</div> </div>
<div class="timeline-content ${discussionClass}"> <div class="timeline-content ${discussionClass}">
<div class="note-header"> <div class="note-header">
<div class="note-header-info"> <div class="note-header-info">
<a href="/${currentUsername}"> <a href="/${_.escape(currentUsername)}">
<span class="hidden-xs">${currentUserFullname}</span> <span class="hidden-xs">${_.escape(currentUsername)}</span>
<span class="note-headline-light">@${currentUsername}</span> <span class="note-headline-light">${_.escape(currentUsername)}</span>
</a> </a>
</div> </div>
</div> </div>
...@@ -1295,6 +1295,9 @@ export default class Notes { ...@@ -1295,6 +1295,9 @@ export default class Notes {
</li>` </li>`
); );
$tempNote.find('.hidden-xs').text(_.escape(currentUserFullname));
$tempNote.find('.note-headline-light').text(`@${_.escape(currentUsername)}`);
return $tempNote; return $tempNote;
} }
......
...@@ -770,6 +770,20 @@ import '~/notes'; ...@@ -770,6 +770,20 @@ import '~/notes';
expect($tempNote.prop('nodeName')).toEqual('LI'); expect($tempNote.prop('nodeName')).toEqual('LI');
expect($tempNote.find('.timeline-content').hasClass('discussion')).toBeTruthy(); expect($tempNote.find('.timeline-content').hasClass('discussion')).toBeTruthy();
}); });
it('should return a escaped user name', () => {
const currentUserFullnameXSS = 'Foo <script>alert("XSS")</script>';
const $tempNote = this.notes.createPlaceholderNote({
formContent: sampleComment,
uniqueId,
isDiscussionNote: false,
currentUsername,
currentUserFullname: currentUserFullnameXSS,
currentUserAvatar,
});
const $tempNoteHeader = $tempNote.find('.note-header');
expect($tempNoteHeader.find('.hidden-xs').text().trim()).toEqual('Foo &lt;script&gt;alert(&quot;XSS&quot;)&lt;/script&gt;');
});
}); });
describe('createPlaceholderSystemNote', () => { describe('createPlaceholderSystemNote', () => {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment