Re: The Perl Jam: Exploiting a 20 Year-old Vulnerability [31c3]

Netanel Rubin held a talk about an alleged 20 year old vulnerability in perl named "The Perl Jam: Exploiting a 20 Year-old Vulnerability" at 31C3 [PDF].

Basically he claims that this is a problem:

my @a = qw(8 foo 666);
my %h = (foo => 100,
	 bar => 333,
	 san => @a);
print Dumper(\%h);

$VAR1 = { 'san' => 8, 'bar' => 333, 'foo' => 666 };

As you can see, the array @a is assigned as a value to the key 'san' of the hash %h. But since it's not assigned as a array reference, the array dissolves into the hash and its values overwrite the keys 'foo' and 'san'.

The "vulnerability" Netanel found, is in the CGI module. The method 'param()' of this module returns an array if a CGI parameter occurs more than once. If the output of that method is being used unchecked in a hash assignment as shown above, then it is possible to overwrite certain values of that hash. This leaded for example to the vulnerability CVE-2014-1572 in Bugzilla.

Netanel's conclusion: perl is broken, horrible, hazardous, bizarre and should not be used anymore.

Wow.

He is wrong on multiple levels. Arrays dissolving into hashes is not a bug and not bad, but intended behavior and very well documented. In fact, I use it alot. I even love it! If you take a look into the function new() of about 80% of all perl modules on CPAN, you'll find, that they support hash arguments, and feed @_ into a hash. Pretty standard for perl people. Others might find it ugly or weird, but hey, it's a free world (mostly), choose another language if you don't like the concept.

Then Netanel has been asked if he knows about references and in response complained about using a backslash in order to assign a reference to a hash (or array) to a variable. He called it "escaping", but that's utter nonsense. \%hash ist pure perl syntax, not escaping.

The talk sounds funny in the first place, but is unsubstancial. Yes there are flaws in perl code which uses CGI.pm in the wrong way. But that's not a perl problem, it's a CGI.pm problem. And it's solved since a long time. Modern web stuff written in perl uses Dancer, Mojolicious or Catalyst and not CGI.pm.

30 December 2014 | #source

 

Migrated from Tiddlywiki to Emacs Org-Mode

I am an early adopter of TiddlyWiki, a personal wiki which runs locally in a browser. I used it for many years nearly every day at work and home. I'm so used to it, I'm unable to do my daily work without it. I even wrote a couple of plugins for TiddlyWiki and I ported it to the palm pre mobile platform.

Now that era is over, thanks to the developers of firefox. I used to use an outdated portable firefox instance at work when a couple of weeks ago the NoScript plugin has been updated. From that moment on, firefox didn't work properly anymore, so I had to update firefox as well. I did it and everything looked good. Until I clicked the "save" button in tiddlywiki - it didn't work anymore. Turns out, that the firefox developers disabled the UniversalXPConnect capability, which made it possible for local Javascripts like TiddlyWiki to access the local harddisk.

There's a plugin called TiddlyFox, which aims to close the gap, but there are several reasons why I can't use it. First, it doesn't work with older wikis. Mine was based on version 2.3 and heavily customized. I just couldn't upgrade it (and I don't know, how, anyway). So I had to use the latest TiddlyWiki version, which I don't like. Then there's the problem, that the TiddlyFox plugin just pops up firefox' "Save as..." dialogue, if you click save and the file already exists, you end up with "wiki(1).html", the next time with "wiki(2).html" and so forth, which is really annoying and impractical. Also, the very fact, that a plugin is required to save a wiki, is a no-go for me. What if the admins of my workstation decide to forbid firefox plugins? I would be fucked.

Therefore I decided to make a cut and look for another solution for note taking and organizing. I ended up with org-mode for emacs. I use emacs anyway, primarily for programming, so I'm at home already. I tried org-mode a decade ago and didn't like it. I've got to admit, I still don't really like it, but I get used to it and it'll suffice my requirements. I use org-mode only for note taking, I don't use its agenda-mode or the time and clocking keeping stuff. So, it's ok. The only thing I miss is a feature I regularly used in TiddlyWiki: click on a tag, a popup appears with all tiddlers which also have this tag, from which you can select one to open it (or jump to it, if it's already open). In org-mode you end up in the agenda if you click on a tag, which splits the window. Ok it is possible to click on a tag there which shows all matching entries but if you click on one, it opens it within the same frame as the agenda. So, in the end you've got two frames with org-mode. So far I was unsuccessfull to disable this annoying behavior, therefore I don't use the tags. Maybe some day I've got a working solution for this (e.g. an imenu with matching entries if click on a tag).

Ok, this is the script I used to convert my TiddlyWiki entries to an org-mode file: tiddlers2orgmode.pl. If you want to use it, keep in mind that it is only tested with TiddlyWiki 2.3. You may also tweak it here and there.

Finally here's the org-mode emacs config I've put together so far:

; org mode
(defvar my-home "C:/Cygwin/home/tom")
(defvar my-lisp (concat my-home "/.emacs.d"))
(defvar my-org-file (concat my-home "/notizen.org"))

(setq load-path (cons (concat my-lisp "/org/lisp") load-path))
(setq load-path (cons (concat my-lisp "/org/contrib/lisp") load-path))

(custom-set-variables
 '(org-agenda-files (list my-org-file))
 '(org-default-notes-file (concat "/remember.org"))
 '(org-reverse-note-order t)
 '(org-remember-store-without-prompt t)
 '(org-reverse-note-order t)
 '(org-startup-indented t)
 '(word-wrap t)
 '(org-startup-truncated nil)
 '(org-columns-default-format "%80ITEM %22Timestamp %TODO %TAGS %0PRIORITY")
 '(org-mouse-1-follows-link nil)
 '(org-insert-heading-always-after-current 't) ; new headings below current
 '(org-M-RET-may-split-line nil) ;; dont break heading with enter
 '(org-blank-before-new-entry (
      ; no blank lines after headings
      quote ((heading . auto) (plain-list-item . auto)))
  )
 '(org-agenda-restore-windows-after-quit t)
 '(org-use-speed-commands t) ; see next block for which ones
 '(org-catch-invisible-edits 'error) ; dont edit invisibles
)

(setq org-speed-commands-user (quote (
    ("0" . ignore)
    ("1" . delete-other-windows)
    ("2" . ignore)
    ("3" . ignore)
    ("d" . org-archive-subtree-default-with-confirmation) ; delete, keep track
    ("v" . org-narrow-to-subtree) ; only show current heading ("view")
    ("q" . widen)                 ; close current heading and show all ("quit")
    (":" . org-set-tags-command)  ; add/edit tags
    )))

; ctrl-n for new entry with template
(setq org-capture-templates
      '(("j" "Note" entry (file+datetree my-org-file)
	 "* %? %^g\n %U\n %i\n"))
)

(define-key global-map "\C-n"
  (lambda () (interactive) (org-capture nil "j")))

; use ctrl-arrows to jump between headings
(add-hook 'org-mode-hook ( lambda ()
   ; move heading down
   (local-set-key (kbd "<C-down>") 'outline-next-visible-heading)
   ; move heading up
   (local-set-key (kbd "<C-up>")   'outline-previous-visible-heading)
   ; alt-enter = insert new subheading below current
   (local-set-key (kbd "<kp-enter>") 'org-insert-subheading)
   ; search for tags (ends up in agenda view)
   (local-set-key "\C-f" 'org-tags-view)
))

(setq org-todo-keywords
 '((sequence "TODO" "STARTED" "WAITING" "DONE" "CANCELED")))

;; todo colors
(setq org-todo-keyword-faces '(
   ("TODO"  . (:foreground "#b70101" :weight bold))
   ("STARTED"  . (:foreground "#b70101" :weight bold))
   ("WAITING"  . (:foreground "orange" :weight bold))
   ("DONE"  . (:foreground "forestgreen" :weight bold))
   ("CANCELED"  . shadow)
))

29 December 2014 | #emacs

 

Unverschämt

Irgendwie hat man sich als Kassenpatient ja damit abgefunden, beim Arzt lange warten zu müssen. Ist halt so. Der Arzt hat ja auch viel zu tun, Wartezimmer voll, wassollmanmachen. Heute habe ich dieses Posting von Kitty Koma über Pünktlichkeit gelesen und dabei ist mir klar geworden, dass das eigentlich eine Frechheit ist.

An sich ist es ganz einfach. Man vereinbart mit jemandem einen Termin und erscheint pünktlich. Erscheint der andere nicht pünktlich, muss man warten. Wenn ich aber warten muss, heisst das, der andere hat meine Zeit verschwendet, denn schliesslich hätte ich in der Zeit ja irgendwas anderes machen können anstatt auf ihn zu warten. Völlig richtig konstatiert Kitty, dass das eine egoistische Unverschämtheit ist.

Und natürlich trifft das auch auf Arzttermine zu. Bei meinem bisherigen (d.h. seit dieser Woche nicht mehr) Hausarzt läuft das so ab: man MUSS um 6:30 Uhr persönlich dort erscheinen und sich in einer Liste mit vergegebenen Terminen eintragen, dann wieder heimgehen und schliesslich zu der Zeit in der man sich eingetragen hat, wieder zu erscheinen. Standard ist dort auch, dass man dann nochmal 45 bis 60 Minuten warten muss, bis man dran ist. Obwohl man einen Termin hatte, den man sich um 6:30 Uhr persönlich besorgen musste! Eigentlich ein Unding und ich frage mich, warum ich diesen Scheiss überhaupt all die Jahre mitgemacht habe, auch wenn ich nicht oft zum Arzt muss.

Nun kam es aber, dass ich diese Woche echt heftig erkältet bin und es nicht geschafft habe, 6:30 dort zu sein. Ich war gegen 7:30 Uhr da und habe keinen Termin bekommen. Ich wurde weggeschickt. Obwohl ich mich mit meinen letzten Reservern dahin geschleppt hatte. Arschlöcher. Ich bin dann zu einem anderen Arzt gefahren und bin nach 10 Minuten dran gewesen. Ohne Termin!

Aber es kommt noch besser: meine Frau, die schon seit 20 Jahren dorthin geht, verfügte über das seltene Privileg, Termine telefonisch mit der Praxis ausmachen zu können (natürlich musste sie dann aber auch immer eine Stunde warten, klar). Und natürlich erstreckte sich dieses Privileg nicht auf mich, ihren Mann. Jedenfalls hat sie sich bei mir angesteckt und nun sind wir beide krank. Sie rief also an, um einen Termin auszumachen. Und was sagt man ihr? Sie soll um 6:30 Uhr vorbekommen und sich eintragen. Das Privileg wurde also gestrichen. Ganz toll.

Da ich sowieso bei Dr. Kaps war, hatte ich auch einen Termin für meine Frau ausgemacht. Ich wurde dann gefragt, ob es ihr denn auch so schlecht ginge, wie mir, was ich bejahte (tatsächlich sogar schlechter). Nein, lassen Sie das mit dem Termin, der Doktor kommt zu Ihnen nach Hause. Klasse finde ich das!

Wie kommen solche Leute eigentlich auf die Idee, ihre Zeit sei irgendwie wertvoller als meine? Was bilden die sich eigentlich ein?

13 November 2014 | #gesellschaft

 

Kaiserlei Graffity

Ich weiss nicht, warum ich dort rumgeschlichen bin. Aber an der Kaiserlei gibt es coole Graffities.

2014-11-06 - Face Graffiti:

2014-11-06 - Krokodil Graffiti:

06 November 2014 | #fotografie

 

Going Dark - crusta.de Abgeschaltet

Ich war bis dato regelmäßiger Leser des Blogs crusta.de. Mir ist aber inzwischen aufgefallen, dass da seit längerem nichts mehr in meinem River landet. Heute hab ich das Debuggen wollen und bin recht schnell auf die Ursache gestossen: die Betreiberin hat die Seite abgeschaltet mit folgender Meldung:

Alles hat irgendwann mal ein Ende..

Nach 7 Jahren ,Crusta' möchte ich mich bei meinen Leserinnen & Lesern bedanken.

Leider ist es mir im Moment aus zeitlichen Gründen nicht möglich, mich wirklich vernünftig um mein Hobby zu kümmern. Mir ist die Entscheidung nicht wirklich leicht gefallen, aber ich bin nicht der Typ, der irgendetwas nur ,halbherzig' macht - entweder ganz oder gar nicht. :-)

Ich habe mich dazu entschieden, den Blog mit den Inhalten nicht mehr zugänglich zu machen. In meinen Augen hat dies keinen Sinn, da viele Dinge mittlerweile überholt sind und keine neuen Informationen mehr dazu kommen.

Euch allen weiterhin viel Spaß an eurem Hobby - keep on shrimping!

Und das ist alles, was auf der Seite noch zu sehen ist. Sämtliche alten Postings, Bilder und Berichte sind weg. Verloren. Für immer.

Zuerst dachte ich daran, die Betreiberin zu kontaktieren, habe es mir dann aber doch anders überlegt. Der Text ist ja recht unzweideutig. Ich kann nachvollziehen, dass man ein Hobby aufgibt, wenn man keine Zeit mehr dafür hat. Wofür ich wenig Verständnis habe ist, dass man die Resultate seiner Arbeit dann einfach wegwirft. Oder - wie hier - löscht, bzw. unzugänglich macht.

An sich ist es das Recht eines jeden Netzteilnehmers, seine Inhalte vom Netz zu nehmen. Aber unfair und ein bischen unrecht ist es jedoch ebenso. Immerhin gab es auf der Seite einen nicht unerheblichen Wissensschatz, der vielen Leuten geholfen hat und wohl auch weiter geholfen hätte, gäbe es die Inhalte noch. Nun sind sie aber verloren. Von den Erfahrungen und dem Wissen, dass die Autorin dort veröffentlicht hatte, wird die Nachwelt nun nicht mehr profitieren. Sicher geht davon die Welt nicht unter, man kann sich auch gut anderswo über Garnelen informieren, Quellen gibt es genug. Aber gerade praktische, langjährige Erfahrungen sind es, aus denen oftmals erst neue Erkenntnisse entstehen.

Traurigerweise war die Autorin ausserdem sehr konsequent, was ihr "Going Dark" betraf: es gibt auch keine archivierten älteren Versionen der Seite mehr auf archive.org oder im Google Cache.

Tja, für mich nicht wirklich nachvollziehbar. Insbesondere wenn man bedenkt, dass die komplette Infrastruktur der Seite weiter von irgendjemand betrieben wird: die Domain ist bezahlt und erreichbar, es gibt einen Server, auf dem Server läuft ein Wordpress welches nur die obige Meldung ausgibt. Wahrscheinlich sind die Inhalte sogar noch in der darunter liegenden Datenbank vorhanden. Ein letztes Abschiedsposting hätte es angesichts dessen auch getan. Kommentarfunktion schliessen und laufen lassen und der Käs wäre gegessen gewesen.

Mir ist das schon mehrmals in letzter Zeit aufgefallen, dass Leute das so handhaben. Über die Gründe kann ich nicht mal spekulieren, ich verstehe es nicht. Man stelle sich vor, bei Wikipedia würde der letzte Autor aufhören und würde die Seite einfach dicht machen. Klar, ich vergleiche Äpfel mit Birnen, das Dilemma ist aber das gleiche.

23 October 2014 | #gesellschaft