<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>15039</bug_id>
          
          <creation_ts>2007-08-21 11:12:40 -0700</creation_ts>
          <short_desc>Cross domain JavaScript injection</short_desc>
          <delta_ts>2007-08-25 12:16:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore JavaScript</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Feng Qian">ian.eng.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>ddkilzer</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1782</commentid>
    <comment_count>0</comment_count>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:12:40 -0700</bug_when>
    <thetext>This has something to do with function closures. 

Steps to reproduce:
1. Save &apos;parent.html&apos; and &apos;child.html&apos; in the same direcotry, and open &apos;parent.html&apos; in Safari.
2. Click on &apos;Open Child Window&apos; button, a new tab/window is opened.
3. Click on &apos;Goto Apple&apos; button, and the parent window is redirected to www.apple.com;
4. Switch to the child window, and click on the button, a dialog pops up and show that the child window can access the parent window contents in a different domain.

Firefox prevents the child window to access Window.alert/Window.document, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1780</commentid>
    <comment_count>1</comment_count>
      <attachid>16056</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:16:15 -0700</bug_when>
    <thetext>Created attachment 16056
test case (parent.html)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1781</commentid>
    <comment_count>2</comment_count>
      <attachid>16057</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:16:49 -0700</bug_when>
    <thetext>Created attachment 16057
test case (child.html)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779</commentid>
    <comment_count>3</comment_count>
      <attachid>16056</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:21:44 -0700</bug_when>
    <thetext>Comment on attachment 16056
test case (parent.html)

&gt;&lt;HTML&gt;&lt;HEAD&gt;
&gt;&lt;SCRIPT&gt;
&gt;parent_doc=window.document;
&gt;Object.prototype.foo = &apos;bar&apos;;
&gt;function openChild() {
&gt;  child = window.open(&quot;child.html&quot;);
&gt;}
&gt;function gotoApple() {
&gt;  var b = child.document.getElementById(&apos;btn&apos;);
&gt;  b.onclick=function() {
&gt;    alert(window.document.location);
&gt;  }
&gt;  // change parent location to different domain
&gt;  window.location=&apos;http://www.apple.com&apos;;
&gt;}
&gt;&lt;/SCRIPT&gt;&lt;/HEAD&gt;&lt;BODY&gt;
&gt;&lt;BUTTON onclick=&quot;openChild()&quot;&gt;Open Child Window&lt;/BUTTON&gt;
&gt;&lt;BUTTON onclick=&quot;gotoApple()&quot;&gt;Goto Apple&lt;/BUTTON&gt;
&gt;
&gt;&lt;/BODY&gt;&lt;/HTML&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1771</commentid>
    <comment_count>4</comment_count>
      <attachid>16058</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:29:48 -0700</bug_when>
    <thetext>Created attachment 16058
slightly cleaned-up test case (parent.html)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1772</commentid>
    <comment_count>5</comment_count>
      <attachid>16059</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-21 11:31:02 -0700</bug_when>
    <thetext>Created attachment 16059
sorry, upload the right version again (parent.html)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1775</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-21 11:44:54 -0700</bug_when>
    <thetext>&lt;rdar://problem/5426142&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1747</commentid>
    <comment_count>7</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2007-08-21 18:45:31 -0700</bug_when>
    <thetext>I think the problem may be that we do some security checking via execState, not domain. This example demonstrates why you have to use domain always.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1711</commentid>
    <comment_count>8</comment_count>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-22 11:20:37 -0700</bug_when>
    <thetext>Two issues I found:

1. Wrong execution context in EventListener::handleEvent. It should be the frame firing events. (Is it the same as the owner frame of event target?)

   This is pretty easy to fix, I think. JSAbstractEventListener::handleEvent should use the current execState to run handler function.

2. When navigating to a new URL, new JS environment has the same built-in objects&amp;prototypes as the old one. 

Both would allow cross domain script injection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1586</commentid>
    <comment_count>9</comment_count>
      <attachid>16101</attachid>
    <who name="Feng Qian">ian.eng.webkit</who>
    <bug_when>2007-08-23 13:54:28 -0700</bug_when>
    <thetext>Created attachment 16101
patch

Only tested the test case, got unsafe scripting exception.
Didn&apos;t run webkit regression tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1473</commentid>
    <comment_count>10</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-08-25 12:16:17 -0700</bug_when>
    <thetext>A fix for this was landed in r25249.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16056</attachid>
            <date>2007-08-21 11:16:15 -0700</date>
            <delta_ts>2007-08-21 11:29:48 -0700</delta_ts>
            <desc>test case (parent.html)</desc>
            <filename>parent.html</filename>
            <type>text/html</type>
            <size>507</size>
            <attacher name="Feng Qian">ian.eng.webkit</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+CnBhcmVudF9kb2M9d2luZG93LmRvY3VtZW50OwpPYmplY3QucHJvdG90
eXBlLmZvbyA9ICdiYXInOwpmdW5jdGlvbiBvcGVuQ2hpbGQoKSB7CiAgY2hpbGQgPSB3aW5kb3cu
b3BlbigiY2hpbGQuaHRtbCIpOwp9CmZ1bmN0aW9uIGdvdG9Hb29nbGUoKSB7CiAgdmFyIGIgPSBj
aGlsZC5kb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYnRuJyk7CiAgYi5vbmNsaWNrPWZ1bmN0aW9u
KCkgewogICAgYWxlcnQod2luZG93LmRvY3VtZW50LmxvY2F0aW9uKTsKICB9CiAgLy8gY2hhbmdl
IHBhcmVudCBsb2NhdGlvbiB0byBkaWZmZXJlbnQgZG9tYWluCiAgd2luZG93LmxvY2F0aW9uPSdo
dHRwOi8vd3d3LmFwcGxlLmNvbSc7Cn0KPC9zY3JpcHQ+Cjxib2R5Pgo8YnV0dG9uIG9uY2xpY2s9
Im9wZW5DaGlsZCgpIj5PcGVuIENoaWxkIFdpbmRvdzwvYnV0dG9uPgo8YnV0dG9uIG9uY2xpY2s9
ImdvdG9Hb29nbGUoKSI+R290byBBcHBsZTwvYnV0dG9uPgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16057</attachid>
            <date>2007-08-21 11:16:49 -0700</date>
            <delta_ts>2007-08-21 11:16:49 -0700</delta_ts>
            <desc>test case (child.html)</desc>
            <filename>child.html</filename>
            <type>text/html</type>
            <size>62</size>
            <attacher name="Feng Qian">ian.eng.webkit</attacher>
            
              <data encoding="base64">PGh0bWw+Cjxib2R5Pgo8YnV0dG9uIGlkPSdidG4nPmNsaWNrPC9idXR0b24+CjwvYm9keT4KPC9o
dG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16058</attachid>
            <date>2007-08-21 11:29:48 -0700</date>
            <delta_ts>2007-08-21 11:31:02 -0700</delta_ts>
            <desc>slightly cleaned-up test case (parent.html)</desc>
            <filename>parent.html</filename>
            <type>text/html</type>
            <size>505</size>
            <attacher name="Feng Qian">ian.eng.webkit</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+CnBhcmVudF9kb2M9d2luZG93LmRvY3VtZW50OwpPYmplY3QucHJvdG90
eXBlLmZvbyA9ICdiYXInOwpmdW5jdGlvbiBvcGVuQ2hpbGQoKSB7CiAgY2hpbGQgPSB3aW5kb3cu
b3BlbigiY2hpbGQuaHRtbCIpOwp9CmZ1bmN0aW9uIGdvdG9BcHBsZSgpIHsKICB2YXIgYiA9IGNo
aWxkLmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdidG4nKTsKICBiLm9uY2xpY2s9ZnVuY3Rpb24o
KSB7CiAgICBhbGVydCh3aW5kb3cuZG9jdW1lbnQubG9jYXRpb24pOwogIH0KICAvLyBjaGFuZ2Ug
cGFyZW50IGxvY2F0aW9uIHRvIGRpZmZlcmVudCBkb21haW4KICB3aW5kb3cubG9jYXRpb249J2h0
dHA6Ly93d3cuYXBwbGUuY29tJzsKfQo8L3NjcmlwdD4KPGJvZHk+CjxidXR0b24gb25jbGljaz0i
b3BlbkNoaWxkKCkiPk9wZW4gQ2hpbGQgV2luZG93PC9idXR0b24+CjxidXR0b24gb25jbGljaz0i
Z290b0FwcGxlKCkiPkdvdG8gQXBwbGU8L2J1dHRvbj4KPC9ib2R5Pgo8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>16059</attachid>
            <date>2007-08-21 11:31:02 -0700</date>
            <delta_ts>2007-08-21 11:31:02 -0700</delta_ts>
            <desc>sorry, upload the right version again (parent.html)</desc>
            <filename>parent.html</filename>
            <type>text/html</type>
            <size>447</size>
            <attacher name="Feng Qian">ian.eng.webkit</attacher>
            
              <data encoding="base64">PGh0bWw+CjxzY3JpcHQ+CmZ1bmN0aW9uIG9wZW5DaGlsZCgpIHsKICBjaGlsZCA9IHdpbmRvdy5v
cGVuKCJjaGlsZC5odG1sIik7Cn0KZnVuY3Rpb24gZ290b0FwcGxlKCkgewogIHZhciBiID0gY2hp
bGQuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2J0bicpOwogIGIub25jbGljaz1mdW5jdGlvbigp
IHsKICAgIGFsZXJ0KHdpbmRvdy5kb2N1bWVudC5sb2NhdGlvbik7CiAgfQogIC8vIGNoYW5nZSBw
YXJlbnQgbG9jYXRpb24gdG8gZGlmZmVyZW50IGRvbWFpbgogIHdpbmRvdy5sb2NhdGlvbj0naHR0
cDovL3d3dy5hcHBsZS5jb20nOwp9Cjwvc2NyaXB0Pgo8Ym9keT4KPGJ1dHRvbiBvbmNsaWNrPSJv
cGVuQ2hpbGQoKSI+T3BlbiBDaGlsZCBXaW5kb3c8L2J1dHRvbj4KPGJ1dHRvbiBvbmNsaWNrPSJn
b3RvQXBwbGUoKSI+R290byBBcHBsZTwvYnV0dG9uPgo8L2JvZHk+CjwvaHRtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16101</attachid>
            <date>2007-08-23 13:54:28 -0700</date>
            <delta_ts>2007-08-23 13:54:28 -0700</delta_ts>
            <desc>patch</desc>
            <filename>bug15039.patch</filename>
            <type>text/plain</type>
            <size>2647</size>
            <attacher name="Feng Qian">ian.eng.webkit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyNTIwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMDctMDgtMjMgIEZlbmcgUWlhbiA8aWFuLmVuZy53ZWJraXRAZ21h
aWwuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeCBpc3N1ZSAxNTAzOS4gVXNlIGV2ZW50IHRhcmdldCBub2RlJ3MgZnJhbWUgYXMgdGhlIGV4
ZWN1dGlvbgorICAgICAgICBlbnZpcm9ubWVudCB0byBleGVjdXRlIGV2ZW50IGhhbmRsZXIuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfZXZlbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkpTQWJzdHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVudCk6CisgICAgICAgICogeG1sL1hN
TEh0dHBSZXF1ZXN0Lmg6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0T3du
ZXJEb2N1bWVudCk6CisKIDIwMDctMDgtMjMgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBTdGV2ZS4KSW5kZXg6IFdlYkNvcmUvYmlu
ZGluZ3MvanMva2pzX2V2ZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9q
cy9ranNfZXZlbnRzLmNwcAkocmV2aXNpb24gMjUyMDcpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pz
L2tqc19ldmVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVk
ZSAiSlNFdmVudFRhcmdldE5vZGUuaCIKICNpbmNsdWRlICJLVVJMLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0LmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5Lmgi
CiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgogCkBAIC03MSw3ICs3MiwyNiBAQCB2b2lkIEpTQWJz
dHJhY3RFdmVudExpc3RlbmVyOjpoYW5kbGVFdmVuCiAgICAgLy8geG1saHR0cHJlcXVlc3Qgb2Jq
ZWN0cy4gU2VlIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMjc1CiAg
ICAgaWYgKCF3aW5kb3cpCiAgICAgICAgIHJldHVybjsKLSAgICBGcmFtZSAqZnJhbWUgPSB3aW5k
b3ctPmltcGwoKS0+ZnJhbWUoKTsKKworICAgIC8vIFVzZSB0aGUgZXZlbnQgdGFyZ2V0J3Mgb3du
ZXIgZnJhbWUgYXMgZXhlY3V0aW9uIGNvbnRleHQuCisgICAgLy8gU2VlIGh0dHA6Ly9idWdzL3dl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDM5CisgICAgRnJhbWUqIGZyYW1lID0gMDsKKyAg
ICB7CisgICAgICAgIEV2ZW50VGFyZ2V0KiB0YXJnZXQgPSBldmVudC0+dGFyZ2V0KCk7CisgICAg
ICAgIE5vZGUqIG5vZGUgPSB0YXJnZXQtPnRvTm9kZSgpOworICAgICAgICBpZiAobm9kZSAmJiBu
b2RlLT5pbkRvY3VtZW50KCkpIHsKKyAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG5v
ZGUtPmlzRG9jdW1lbnROb2RlKCkgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihub2RlKSA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBub2RlLT5vd25lckRvY3VtZW50KCk7CisgICAgICAgICAgICBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLy8gVGhlIHRhcmdl
dCBpcyBhIFhNTEh0dHBSZXF1ZXN0IG9iamVjdC4KKyAgICAgICAgICAgIFhNTEh0dHBSZXF1ZXN0
KiB4aHIgPSB0YXJnZXQtPnRvWE1MSHR0cFJlcXVlc3QoKTsKKyAgICAgICAgICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IHhoci0+Z2V0T3duZXJEb2N1bWVudCgpOworICAgICAgICAgICAgZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKTsKKyAgICAgICAgfQorICAgIH0KKyAgCiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwogICAgIEtKU1Byb3h5KiBwcm94eSA9IGZyYW1lLT5zY3JpcHRQ
cm94eSgpOwpJbmRleDogV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCShyZXZpc2lvbiAyNTIwNykKKysrIFdlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTk5LDYgKzk5LDggQEAg
cHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+
LCBFeGNlcHRpb25Db2RlJiwgYm9vbCB0ZW1wRXZlbnQgPSBmYWxzZSk7CiAgICAgRXZlbnRMaXN0
ZW5lcnNNYXAmIGV2ZW50TGlzdGVuZXJzKCkgeyByZXR1cm4gbV9ldmVudExpc3RlbmVyczsgfQog
CisgICAgRG9jdW1lbnQqIGdldE93bmVyRG9jdW1lbnQoKSB7IHJldHVybiBtX2RvYzsgfQorCiAg
ICAgdXNpbmcgU2hhcmVkPFhNTEh0dHBSZXF1ZXN0Pjo6cmVmOwogICAgIHVzaW5nIFNoYXJlZDxY
TUxIdHRwUmVxdWVzdD46OmRlcmVmOwogCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>