<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
</head>
<body bgcolor="#ffffff" text="#000000">
Jason,<br>
unescaping the text&nbsp; before passing it to antisamy seem to work. Thanks
for your help. <br>
<br>
-Girish<br>
<br>
<font size="-1"></font>
<h2></h2>
<br>
Girish wrote:
<blockquote cite="mid:49E39625.1070406@yahoo.com" type="cite">
  <meta content="text/html;charset=ISO-8859-1" http-equiv="Content-Type">
  <title></title>
Jason,<br>
yes, I am using *antisamy-1.3.xml" policy file. I got your point about
URL. I think I can deal with it by adding ancho/href tags. <br>
  <br>
--------------- partial xml snippet for reference ----------<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pubDate&gt;Tue, 9 Aug 2006 00:00:00 GMT&lt;/pubDate&gt;<br>
  <br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;&lt;script&gt;alert('Channel Title Vulnerability -
Type 2')&lt;/script&gt;&lt;/title&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&amp;lt;script&amp;gt;alert('Channel Title
Description Vulnerability - Type
2')&amp;lt;/script&amp;gt;&lt;/description&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;&amp;lt;script&amp;gt;alert('Channel Link
Vulnerability - Type 2')&amp;lt;/script&amp;gt;&lt;/link&gt;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="javascript:alert('Channel">javascript:alert('Channel</a>
Image URL Vulnerability -
Type 1');&lt;/url&gt;<br>
  <br>
------------------------------------<br>
  <br>
  <br>
here is the debug output that shows what is being passed in to antisamy
and the output. <br>
  <br>
**********processing node = pubDate*********<br>
input to Antisamy========&gt;Tue, 9 Aug 2006 00:00:00 GMT<br>
output from Antisamy========&gt;Tue, 9 Aug 2006 00:00:00 GMT<br>
  <br>
**********processing node = title*********<br>
input to Antisamy========&gt;&lt;script&gt;alert('Channel Title
Vulnerability - Type 2')&lt;/script&gt;<br>
output from Antisamy========&gt;<br>
  <br>
**********processing node = description*********<br>
input to Antisamy========&gt;&amp;lt;script&amp;gt;alert('Channel Title
Description Vulnerability - Type 2')&amp;lt;/script&amp;gt;<br>
output from Antisamy========&gt;&amp;lt;script&amp;gt;alert('Channel
Title Description Vulnerability - Type 2')&amp;lt;/script&amp;gt;<br>
  <br>
**********processing node = link*********<br>
input to Antisamy========&gt;&amp;lt;script&amp;gt;alert('Channel Link
Vulnerability - Type 2')&amp;lt;/script&amp;gt;<br>
output from Antisamy========&gt;&amp;lt;script&amp;gt;alert('Channel
Link Vulnerability - Type 2')&amp;lt;/script&amp;gt;<br>
  <br>
**********processing node = url*********<br>
input to Antisamy========&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="javascript:alert('Channel">javascript:alert('Channel</a>
Image URL
Vulnerability - Type 1');<br>
output from Antisamy========&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="javascript:alert('Channel">javascript:alert('Channel</a>
Image URL
Vulnerability - Type 1');<br>
  <br>
pls let me know if you need more info. <br>
  <br>
thanks,<br>
Girish<br>
  <br>
  <br>
Jason Li wrote:
  <blockquote
 cite="mid:bc959ff00904131220r6948b383pcacafa690c6650d2@mail.gmail.com"
 type="cite">
    <pre wrap="">Girish,

With regards to validating the description and title elements, I'm
surprised this isn't working straight out of box.

My tests with the default AntiSamy policy file and plaintext version
show that you should get an empty string back from AntiSamy.

A few questions:
- Are you using the default AntiSamy policy file?
- When you extract the text content for each node from your DOM
object, is it returning the XML encoded version of the text content
(i.e. &amp;lt;script&amp;gt;) or just the unencoded text version (i.e.
&lt;script&gt;)?
- Can you also provide the input and output (debugging or
System.out.println()) of AntiSamy?  I'd like to eliminate the
possibility that it's the DOM implementation that you're using
(perhaps returns text content different than expected or doesn't
update the DOM tree as expected).

As to your question about links, you're absolutely right about URLs
such as <a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="javascript:alert()">javascript:alert()</a>;.  That's why AntiSamy applies URL
validation to anchor tags and link tags in HTML.

However, AntiSamy only validates HTML. I can't stress this enough:
AntiSamy assumes the input it receives is meant to be interpreted as
HTML.

If you pass in text that is going to be interpreted as a URL (like the
text content of the URL XML node), AntiSamy doesn't have context to
know that it's going to be interpreted as URL. The best thing I can
suggest is kind of a kluge-hack which is to take the HTML *attribute*
encoded version of the text content of your URL XML node and place it
inside a make shift anchor tag with an href so that AntiSamy will
perform proper URL validation on it.

Take that suggestion with a grain of salt though - it's off the top of
my head and I haven't thought through all the security considerations.

--
-Jason Li-
-jason.li@owasp.org-



On Mon, Apr 13, 2009 at 2:52 PM, Girish <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:ivgirish@yahoo.com">&lt;ivgirish@yahoo.com&gt;</a> wrote:
  </pre>
    <blockquote type="cite">
      <pre wrap="">Jason,
Thank you very much for detailed reply. Yes, you are right. The html content
is inside RSS feeds. But I am not passing the entire xml to antisamy. I am
actually
- walking the xml tree
- extracting the text content for each node
- passing only text content to antisamy
- then, updating the xml/dom tree with filtered content

for example, here is the RSS feed that I am using for testing.

&lt;?xml version="1.0" ?&gt;
&lt;rss version="2.0"&gt;
&nbsp;&nbsp;&nbsp; &lt;!-- rsstest.markwoodman.com\malicious_2.rss --&gt;
&nbsp;&nbsp;&nbsp; &lt;!-- Entity encoded script insertion --&gt;
&nbsp;&nbsp;&nbsp; &lt;channel&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pubDate&gt;Tue, 9 Aug 2006 00:00:00 GMT&lt;/pubDate&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;&lt;script&gt;alert('Channel Title Vulnerability - Type
2')&lt;/script&gt;&lt;/title&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&amp;lt;script&amp;gt;alert('Channel Title Description
Vulnerability - Type 2')&amp;lt;/script&amp;gt;&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;&amp;lt;script&amp;gt;alert('Channel Link Vulnerability - Type
2')&amp;lt;/script&amp;gt;&lt;/link&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="javascript:alert('Channel">javascript:alert('Channel</a> Image URL Vulnerability - Type
1');&lt;/url&gt;

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;&amp;lt;script&amp;gt;alert('Item Title Vulnerability - Type
2')&amp;lt;/script&amp;gt;&lt;/title&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&amp;lt;script&amp;gt;alert('Item Description Vulnerability -
Type 2')&amp;lt;/script&amp;gt;&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;&amp;lt;script&amp;gt;alert('Item Link Vulnerability - Type
2')&amp;lt;/script&amp;gt;&lt;/link&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/item&gt;

&nbsp;&nbsp;&nbsp; &lt;/channel&gt;

&lt;/rss&gt;

======== the output after running it thru antisamy is=========
&lt;?xml version="1.0" encoding="UTF-8"?&gt;
&lt;rss version="2.0"&gt;
&lt;!-- rsstest.markwoodman.com\malicious_2.rss --&gt;&nbsp;&nbsp;&nbsp; &lt;!-- Entity encoded
script insertion --&gt;&nbsp;&nbsp;&nbsp; &lt;channel&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;pubDate&gt;Tue, 9 Aug 2006 00:00:00 GMT&lt;/pubDate&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title/&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&amp;amp;lt;script&amp;amp;gt;alert('Channel Title Description
Vulnerability - Type 2')&amp;amp;lt;/script&amp;amp;gt;&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;&amp;amp;lt;script&amp;amp;gt;alert('Channel Link Vulnerability - Type
2')&amp;amp;lt;/script&amp;amp;gt;&lt;/link&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;url&gt;<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="javascript:alert('Channel">javascript:alert('Channel</a> Image URL Vulnerability - Type
1');&lt;/url&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;item&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;title&gt;&amp;amp;lt;script&amp;amp;gt;alert('Item Title Vulnerability - Type
2')&amp;amp;lt;/script&amp;amp;gt;&lt;/title&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;description&gt;&amp;amp;lt;script&amp;amp;gt;alert('Item Description
Vulnerability - Type 2')&amp;amp;lt;/script&amp;amp;gt;&lt;/description&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;link&gt;&amp;amp;lt;script&amp;amp;gt;alert('Item Link Vulnerability - Type
2')&amp;amp;lt;/script&amp;amp;gt;&lt;/link&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/item&gt;
&nbsp;&nbsp; &lt;/channel&gt;
&lt;/rss&gt;


NOTE: it didn't remove <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="javascript:alert">"javascript:alert"</a> also in url link above.

As you can see here (<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="http://ha.ckers.org/xss.html">http://ha.ckers.org/xss.html</a>), most of the time the
malicious html/javascript is going to be encoded using octal/hex/comment
tags to bypass regular expression filters of purifiers.

an example
------------------------------------------------------------
&lt;IMG SRC="jav&amp;#x09;ascript:alert('XSS');"&gt;
-------------------------------------------------------------

So, wondering what's the best way to deal with this type of code ?

appreciate your help.

thanks,
Girish



Jason Li wrote:

That's definitely an issue if encoded HTML gets decoded by the DOM parser...

That's something we need to look into and fix.

Thanks for pointing that out Eric!
--
-Jason Li-
-jason.li@owasp.org-



On Mon, Apr 13, 2009 at 1:28 PM, Eric Kreiser <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:ekreiser@mzinga.com">&lt;ekreiser@mzinga.com&gt;</a> wrote:


The other problem I have seen with antisamy is that if the value you
send to antisamy is escaped... but you use the
getCleanXMLDocumentFragment() to get your scrubbed value... it reverses
all the escaping... leaving you now with a value that would have
otherwise violated the policy file



Jason Li wrote:


Girish,

By default, script tags should be removed by AntiSamy.

I think the problem may lie in your statement, "even if they are escaped."

If you pass in:
&lt;script&gt;alert('Channel Title Description Vulnerability - Type 2')&lt;/script&gt;

to AntiSamy, you should get nothing back.

However, your statement leads me to believe that in fact you're passing in:
&amp;lt;script&amp;gt;alert('Channel Title Description Vulnerability - Type
2')&amp;lt;/script&amp;gt;

The above is "safe" from AntiSamy's perspective because it assumes
that the content is directly rendered in an HTML interpreter.

My guess from the behavior you describe and examples you give sounds
like you have encoded HTML embedded in XML - so something that looks
like this (here the tainted input is contained in an XML element, item
description, and therefore encoded):
&lt;rss version="2.0"&gt;
&nbsp; &lt;channel&gt;
&nbsp; &nbsp; &lt;title&gt;Example&lt;/title&gt;
&nbsp; &nbsp; &lt;link&gt;<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="http://example.com">http://example.com</a>&lt;/link&gt;
&nbsp; &nbsp; &lt;description&gt;Example&lt;/description&gt;
&nbsp; &nbsp; &lt;item&gt;
&nbsp; &nbsp; &nbsp; &lt;title&gt;Example&lt;/title&gt;
&nbsp; &nbsp; &nbsp; &lt;link&gt;<a moz-do-not-send="true"
 class="moz-txt-link-freetext" href="http://example.com">http://example.com</a>&lt;/link&gt;
&nbsp; &nbsp; &nbsp; &lt;description&gt;This is the text that you're trying to validate
&amp;lt;script&amp;gt;alert('Channel Title Description Vulnerability - Type
2')&amp;lt;/script&amp;gt;&lt;/description&gt;
&nbsp; &nbsp; &lt;/item&gt;
&nbsp; &lt;/channel&gt;
&lt;/rss&gt;

AntiSamy can't know the context where your content is coming from -
it's expecting HTML content that goes to an HTML interpreter. If the
content you are provided is encoded HTML that goes to an interpreter
that decodes the HTML, AntiSamy won't be able to properly validate it.
You'd have to provide an HTML decoded version for AntiSamy to handle
properly.

Am I interpreting your use case correctly? And if so, does that
explanation make sense?
--
-Jason Li-
-jason.li@owasp.org-



On Fri, Apr 10, 2009 at 6:52 PM, Girish <a moz-do-not-send="true"
 class="moz-txt-link-rfc2396E" href="mailto:ivgirish@yahoo.com">&lt;ivgirish@yahoo.com&gt;</a> wrote:



I am using 1.3 version and i have tried all the 4 policy files. They all
give the same result.

For example, if my html is this (passing line by line to antisamy):

&nbsp; &nbsp; &nbsp;&lt;script&gt;alert('Channel Title Description Vulnerability -
Type 2')&lt;/script&gt;
&nbsp; &nbsp; &nbsp;&lt;script&gt;alert('Channel Link Vulnerability - Type
2')&lt;/script&gt;
&nbsp; &nbsp; &nbsp;<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="javascript:alert('Channel">javascript:alert('Channel</a> Image URL Vulnerability - Type 1');

the output I am getting is:

&nbsp; &nbsp; &nbsp;&amp;lt;script&amp;gt;alert('Channel Title Description
Vulnerability - Type 2')&amp;lt;/script&amp;gt;
&nbsp; &nbsp; &nbsp;&amp;lt;script&amp;gt;alert('Channel Link Vulnerability - Type
2')&amp;lt;/script&amp;gt;
&nbsp; &nbsp; &nbsp;<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="javascript:alert('Channel">javascript:alert('Channel</a> Image URL Vulnerability - Type 1');

any idea on how to remove the tags like
script/javascript/embed/frame/etc even if they are escaped.


_______________________________________________
Owasp-antisamy mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:Owasp-antisamy@lists.owasp.org">Owasp-antisamy@lists.owasp.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.owasp.org/mailman/listinfo/owasp-antisamy">https://lists.owasp.org/mailman/listinfo/owasp-antisamy</a>



_______________________________________________
Owasp-antisamy mailing list
<a moz-do-not-send="true" class="moz-txt-link-abbreviated"
 href="mailto:Owasp-antisamy@lists.owasp.org">Owasp-antisamy@lists.owasp.org</a>
<a moz-do-not-send="true" class="moz-txt-link-freetext"
 href="https://lists.owasp.org/mailman/listinfo/owasp-antisamy">https://lists.owasp.org/mailman/listinfo/owasp-antisamy</a>


    </pre>
    </blockquote>
    <pre wrap=""><!---->
  </pre>
  </blockquote>
  <pre wrap="">
<hr size="4" width="90%">
_______________________________________________
Owasp-antisamy mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Owasp-antisamy@lists.owasp.org">Owasp-antisamy@lists.owasp.org</a>
<a class="moz-txt-link-freetext" href="https://lists.owasp.org/mailman/listinfo/owasp-antisamy">https://lists.owasp.org/mailman/listinfo/owasp-antisamy</a>
  </pre>
</blockquote>
</body>
</html>