Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Distill: Death to Cookies
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Konstantin Haase
August 09, 2013
Technology
1.2k
7
Share
Distill: Death to Cookies
Konstantin Haase
August 09, 2013
More Decks by Konstantin Haase
See All by Konstantin Haase
RubyConf Philippines 2017: Magenta is a Lie
rkh
0
230
How We Replaced Salary Negotiations with a Sinatra App
rkh
17
4.3k
HTTP (RubyMonsters Edition)
rkh
5
1.2k
GCRC 2015: Abstract Thoughts on Abstract Things
rkh
1
390
Frozen Rails: Magenta - The Art Of Abstraction
rkh
3
340
RedDotRubyConf 2014: Magenta is a Lie - and other tales of abstraction
rkh
0
980
Ancient City Ruby: Hack me, if you can!
rkh
2
460
Boston I/O: Continuous Integration
rkh
3
330
Steel City Ruby: Architecting Chaos
rkh
4
980
Other Decks in Technology
See All in Technology
「使われるデータ基盤」を目指してデータアナリストとワークショップをやった話
jackojacko_
2
940
エンジニアは生成AIと どのように向き合うべきか? ことばの意味という観点から
verypluming
3
300
NFLコンペ2026 解法
lycorptech_jp
PRO
0
130
React、まだ楽しくて草
uhyo
3
500
Gradle×GitHub_ActionsでCI時間を約50%短縮 ジョブ分割の設計と落とし穴 / Cutting CI Time by ~50% with Gradle and GitHub Actions: Job-Splitting Design and Pitfalls
takatty
0
540
最低限これだけ押さえれ大丈夫_Claude Enterprise/Team企業展開ガバナンス入門
tkikuchi
1
560
Javaコミュニティをもっと楽しむための9箇条
takasyou
0
740
20260528_生成AIを専属DSに_Howの次にすべきことを考える
doradora09
PRO
0
270
Terraformモジュールは、なぜ「魔境」化するのか
hayama17
1
130
権限管理設計を完全に理解した
rsugi
2
240
JEP 522 Deep Dive - G1 GC同期コスト削減によるスループット向上を徹底検証&解説
tabatad
1
450
テストコードのないプロジェクトにテストを根付かせる
tttol
0
230
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Heart Work Chapter 1 - Part 1
lfama
PRO
7
36k
The Cult of Friendly URLs
andyhume
79
6.9k
Fireside Chat
paigeccino
42
3.9k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
5.8k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
120k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Taking LLMs out of the black box: A practical guide to human-in-the-loop distillation
inesmontani
PRO
3
2.2k
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.5k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
310
Transcript
Death to Cookies Konstantin Haase @konstantinhaase
story time
None
None
None
once upon a time
None
None
Recipetastic™
None
None
Bob Alice
Bob Alice
Bob Alice Eve
Bob Alice Mallet
problem solved
None
POST /login HTTP/1.1 Host: www.recipetast.ic Content-Length: 44
[email protected]
& password=st0p%20Motion
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: user=bob <html> ...
GET / HTTP/1.1 Host: www.recipetast.ic Cookie: user=bob
Guessing
None
None
None
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: user=bob Set-Cookie: pwd=... <html>
...
GET / HTTP/1.1 Host: www.recipetast.ic Cookie: user=bob,pwd=...
GET / HTTP/1.1 Host: www.recipetast.ic Cookie: user=bob,pwd=... Basic Auth, just
with cookies
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: user=bob Set-Cookie: token=... <html>
...
None
XSS Cross Site Scripting
None
can read cookie and send it somewhere
None
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: user=bob; HttpOnly <html> ...
None
can read (and write) recipes
None
sanitize all user input
Content Security Policy
None
CSRF Cross Site Request Forgery
Is this awesome, y/n?
None
GET /create?… HTTP/1.1 Host: www.recipetast.ic Cookie: user=alice
GET /create?… HTTP/1.1 Host: www.recipetast.ic Cookie: user=alice Deadly cookies!
None
GET, HEAD, OPTIONS, TRACE PUT, DELETE, LINK, UNLINK POST, PATCH
1 2 PUT / 2 PUT / 2 Repeatable! :)
State change! :( Deterministic! :) https://speakerdeck.com/rkh/we-dont-know-http
GET, HEAD, OPTIONS, TRACE PUT, DELETE, LINK, UNLINK POST, PATCH
None
None
None
POST /create HTTP/1.1 Host: www.recipetast.ic Cookie: user=alice ...
POST /create HTTP/1.1 Host: www.recipetast.ic Cookie: user=alice ... Deadly cookies!
None
POST /create HTTP/1.1 Host: www.recipetast.ic Referer: http://awesome- website.com/ Cookie: user=alice
POST /create HTTP/1.1 Host: www.recipetast.ic Referer: http://awesome- website.com/ Cookie: user=alice
[sic]
None
None
Referer is not set for FTP or HTTPS referrers
Referer can be spoofed by outdated flash plugin
None
POST /create HTTP/1.1 Host: www.recipetast.ic Origin: http://awesome- website.com Cookie: user=alice
None
None
Not supported by older browsers
Origin can probably be spoofed by outdated flash plugin
None
HTTP/1.1 200 OK Content-Type: text/html Set-Cookie: csrf_token=XXX
None
None
Cheating Same Origin
HTTP/1.1 200 OK Content-Type: application/json
An attacker could just load it, right?
AJAX can only load from the same origin (or CORS)
None
seems harmless
In JavaScript, you can override the array constructor.
https://github.com/rkh/json-csrf
None
Never serve JSON that has an array at top level
(or don’t use cookies)
None
VBScript did not fully implement Same Origin
None
Block Internet Explorer before IE9
Block Internet Explorer before IE9
require CSRF token for all AJAX requests
None
Are we doing good so far?
None
Can we trust a cookie?
DNS cache poisoning
Can we trust the browser?
Can we trust browser plugins?
None
None
Signed Cookies
Encrypted Cookies
None
Eaves- dropping
encrypting cookies does not help
None
None
None
attacker cannot parse cookie from stream
None
Or can they?
BEAST Browser Exploit Against SSL/ TLS
decrypts TLS 1.0 streams via injected JavaScript
None
fixed in TLS 1.1
force recent browser
don’t allow TLS 1.0
None
CRIME Compression Ratio Info-leak Made Easy
SSL has built-in compression
GET /?user=alice HTTP/1.1 Host: www.recipetast.ic Cookie: user=bob GET /?user=bob HTTP/1.1
Host: www.recipetast.ic Cookie: user=bob better compression
None
update your browser
turn off SSL compression
append random number of bytes to response
None
BREACH Browser Reconnaissance and Exfiltration via Adaptive Compression of Hypertext
like CRIME, but for the response
attack the CSRF token, not the cookie
inject something in the response http://www.recipetast.ic/search?q=XXX
None
mask CSRF tokens differently in every response (Rails PR pending)
don’t use CSRF tokens
None
Do you think about all this when you build an
app?
Next attack vector around the corner?
None
Alternatives
IP address
Session ID in URL
None
Custom Authorization header
None
Store value in Local Storage
Needs JavaScript :(
Works well with PJAX/ Turbo Links like setups
None
New Browser Concepts?
None
@konstantinhaase
[email protected]
rkh.im