<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0in;
        margin-right:0in;
        margin-bottom:0in;
        margin-left:.5in;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1676808940;
        mso-list-type:hybrid;
        mso-list-template-ids:-2031701742 1179315868 67698691 67698693 67698689 67698691 67698693 67698689 67698691 67698693;}
@list l0:level1
        {mso-level-start-at:2012;
        mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;
        mso-fareast-font-family:Calibri;
        mso-bidi-font-family:"Times New Roman";}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Symbol;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:"Courier New";}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-.25in;
        font-family:Wingdings;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><div><p class=MsoNormal> <span style='color:#1F497D'>All,</span><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks everyone for the great discussion on this on topic. I had a crazy week this week so haven’t had a chance to jump in until now. I’ve been thinking really hard about exactly this terminology problem since early last year, which is why this email is so long. And for those of you who don’t care about XSS terminology, you can stop reading now :-)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Last year, I was able to deliver three versions of my talk:  “Unraveling some of the Mysteries around DOM Based XSS”<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>At 3 different OWASP Conferences:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>2012 AppSec DC: <a href="https://www.owasp.org/images/f/f4/ASDC12-Unraveling_some_of_the_Mysteries_around_DOMbased_XSS.pdf">https://www.owasp.org/images/f/f4/ASDC12-Unraveling_some_of_the_Mysteries_around_DOMbased_XSS.pdf</a> <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>2012 AppSec Europe: <a href="https://www.owasp.org/images/3/30/AppSecEU2012_DOM-based_XSS.pdf">https://www.owasp.org/images/3/30/AppSecEU2012_DOM-based_XSS.pdf</a> <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>2012 AppSec USA: <a href="https://www.owasp.org/images/c/c5/Unraveling_some_Mysteries_around_DOM-based_XSS.pdf">https://www.owasp.org/images/c/c5/Unraveling_some_Mysteries_around_DOM-based_XSS.pdf</a><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>In my first talk, I talked about ‘traditional’ vs. DOM based XSS, and acknowledged there could be both Stored and Reflected versions of both. But the use of ‘Traditional’ seemed like a weak term to me.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>So, I started an email discussion in early summer 2012 with Amit Kline, Mario Heiderich, Stefano DiPaolo, Arshan Dabirsiaghi, and other XSS researchers and proposed a new term: Server XSS – where ‘Server XSS’ occurs when untrusted user supplied data is included in an HTML response generated by the server. In that discussion, I asked Amit (who coined the original term DOM Based XSS) if he thought it reasonable to adjust the definition of DOM Based XSS to consider any Client Side XSS issue, where client side XSS means: Client XSS occurs when untrusted user supplied data is used to update the DOM with an unsafe JavaScript (or other browser side scripting language) call.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Amit said that he considers it DOM XSS only when the data comes from, and never left, the browser, e.g., the classic DOM XSS example of: </span><a href="http://www.some.site/page.html#name=xss_attack_here?name=safe_input_here">http://www.some.site/page.html#name=xss_attack_here?name=safe_input_here</a><span style='color:#1F497D'>), but this would not be considered a DOM XSS: </span><a href="http://www.some.site/page.html?name=xss_attack_here">http://www.some.site/page.html?name=xss_attack_here</a>, <span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>since the attack script goes to the server. According to Amit, DOM XSS doesn’t include situations where data goes from the browser to the server, and then back to the browser (e.g. via an AJAX call), and then JavaScript grabs that data, and updates the DOM with it unsafely, introducing an XSS. I originally didn’t agree, but who am I to redefine a term invented by someone else </span><span style='font-size:11.0pt;font-family:Wingdings;color:#1F497D'>J</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>. I then realized that trying to redefine an existing term might be confusing anyway, so it is probably actually better not to try. So, instead, I proposed using the term Client Side XSS to define the general case where JavaScript was being used to update the DOM unsafely, and that term doesn’t care about the source of the data, or what it passed through, so it encompasses both DOM Based XSS, and XSS where the data comes from the server.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I made this proposal back to the people participating in my email discussion in mid-2012 and also started using the terms Client XSS and Server XSS in my next 2 DOM Based XSS presentations at OWASP AppSec EU and USA. But, then I got distracted by other things and it wasn’t until OWASP AppSec EU 2013 in Germany that I got a chance to sit down (actually standing up drinking beer with </span><span style='font-size:11.0pt;font-family:Wingdings;color:#1F497D'>J</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>) Mario and Eduardo Alberto Vela Nava (who is another XSS research guru, who works for Google) and we agreed to move forward with these new terms. In August, I wrote a short article pulling all this together, but then never pulled the trigger on actually publishing it. So now I have (see below).<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I wanted to respond to some of the specific comments on this thread first:<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Serg – THANKS!! For bringing this topic up, and starting the discussion. I absolutely agree that XSS terminology today is confusing, hence my proposal.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Most of the discussion has generally aligned with my proposal so I’m not going to specifically comment on most responses.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Erlend – I believe the terminology you heard regarding Server side vs. Client side XSS from Stefano is based on the email discussions we have had on this topic starting in mid 2012. Your chart: </span><a href="http://erlend.oftedal.no/blog/research/xss/index.html">http://erlend.oftedal.no/blog/research/xss/index.html</a> <span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>is almost identical to what I propose except DOM based XSS is a subset of both Stored and Reflected Client Side XSS. You can have Client Side XSS that is NOT DOM based, because the data came from the server, rather than staying only in the DOM.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Tobias – You have used the same terms as I have, but not all client side XSS is DOM based, per above.<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Colin Watson – Colin, I have only the deepest respect for you, so it hurts me to disagree with your suggestion: “For completeness, are we happy that JavaScript injection into server-side application code (e.g. node.js) is best described as "command injection" and not any sort of XSS?” I think any time we are seeing JavaScript injected into the web app environment, and it ultimately gets executed in the victim’s browser, it should be called XSS, to avoid confusion. It’s possible that I don’t properly understand your scenario here. I think you are indicating that the attacker uploaded .js files or code to the server, and then the server served that .js? I know that’s not traditional XSS where we are injecting snippets, but why wouldn’t we still call that XSS?<o:p></o:p></span></p><p class=MsoListParagraph style='text-indent:-.25in;mso-list:l0 level1 lfo1'><![if !supportLists]><span style='font-size:11.0pt;font-family:Symbol;color:#1F497D'><span style='mso-list:Ignore'>·<span style='font:7.0pt "Times New Roman"'>         </span></span></span><![endif]><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Giorgio Fedon’s comment about focusing on defenses around the sink, rather than the source of the data is SPOT ON! We don’t ignore the source (stored or reflected) because that has a significant impact on the likelihood of a successful attack, but it generally doesn’t have much to do with the easiest/most straightforward ways to defend against the problem.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Anyway, I have finally published my article on suggested terminology for XSS that is inclusive of the existing definitions of Stored, Reflected, DOM Based XSS without redefining or changing them, and adds two new terms, Server XSS and Client XSS that focuses on where the actual code that is running introduces the XSS problem.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>This article is now at: </span><a href="https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting">https://www.owasp.org/index.php/Types_of_Cross-Site_Scripting</a><o:p></o:p></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>The article is long enough that I thought repeating it in this email, was unnecessary. I included some acknowledgements in there to give people a sense that a significant portion of the research community agrees with this to help it get critical mass/adoption. I’m happy to remove that section once we feel we are all good with this and want to adopt/use these terms at OWASP going forward.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Once we do agree, there are lots of places on the OWASP wiki to update to match, like most/all of the other XSS articles it references, as well as the OWASP Top 10, probably all the guides, etc.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Please review and let me know what you think.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Thanks, Dave<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p></div></div></body></html>