CookieのSameSite属性

概要 Cookieに新たにSameSite属性というものが提案され、主要なブラウザで実装が進んでいる。 かつてはFirst-Party-Only Cookieと呼ばれていたもの。 https://tools.ietf.org/html/draft-west-first-party-cookies-05 クロスオリジンへのリクエスト送信時にCookieを付与しないことで、予期せぬ形での情報漏洩を...

gixyでNginxの設定ファイルの脆弱性を検査する

Nginxでは設定に不備があるとSSRFやHTTP Response Splittingなどの脆弱性が生じる。 例えば以下のような感じだとHTTP Response Splittingが生じる。 server { listen 6789 default; location ~ /v1/((?<token>[^.]*)\.json)?$ { add_header X-Actio...

Reactで安全にMarkdownをHTMLレンダリングする

ユーザー入力値をMarkdownとして受取り、HTMLとしてレンダリングしたい場面は少なくない。 当然ながらHTMLとして出力するため、onerrorやhref属性などは適切にサニタイズしなければならない。 import React, { Component } from 'react'; import marked from 'marked'; import Pr...

GitLab XSS via .ipynb

GitLabにXSSがあったので報告した。 https://about.gitlab.com/2018/01/16/gitlab-10-dot-3-dot-4-released/ 上記リンクのJupyter Notebook XSSというやつ。 PoC 以下の内容のipynbファイルを作成する。 ipynbファイルの実態はJSONである。 { "cells": [ { &#3...

大学を卒業した

2018/3/17無事に大学を卒業した。 良い機会なので4年間を振り返る。 1年目 プログラミングとかセキュリティに入学当時から興味を持ってはいたものの、ARとかMRとか、もっと実世界に直接影響をあたえるようなことがしたいなーみたいなのを思って情報学部に入った。すぐ興味は失せたが… 5,6月ぐらいにTwitterでセキュリティ・キャンプというものがあるという情報を得たので応募するた...

機密情報の比較処理、secure_compareの実装について

ActiveSupport::SecurityUtils.secure_compareやRack::Util.secure_compareについてメモ。 文字列が等価であるかどうか確認するのにa == bという風に書くことが多い。 しかし、機密情報の比較にこの形式を用いると、処理に要する時間からアルゴリズムが特定されたり、機密情報自体が漏れる可能性がある(所謂、Timing Attack)。 例え...

最近のJavaScriptフレームワークでのXSS

所謂、最近流行っているJavaScriptフレームワークでのXSSの例をいくつか挙げようと思う。 最近のJavaScriptフレームワークは賢いので、データをバインドする際にHTMLエスケープしてくれてXSSから保護してくれる。 しかしながら、保護が適用されないケースもあるため、過度にフレームワークに信頼しているとXSSを作り込んでしまう。 ここではReactとVue.jsでその例をいくつか挙げよ...