fakeobj primitive を使った Memory Corrupution

前回の記事 では addrof という関数を作り、メモリリークを行った。 この記事 では addrof の反対の動作をするものとして fakeobj という attack primitive が紹介されている。 attack primitive とは exploit primitive とも呼ばれ、攻撃を成功させる過程のうちの1つのテクニックみたいなイメージ。 addrof が object を配...

WebKit JSC における RegExp の JIT 最適化による脆弱性を調べた

https://googleprojectzero.blogspot.com/2019/08/jsc-exploits.html で Exploit 7 として紹介されている脆弱性について調べた。 PoC が公開されているのと Web に解説もあるので、取っ掛かりやすかろうということで。 これはどういうバグかというと、PoC の The Bug に書かれている通りで、RegEx のマッチング処理が...

Webkit の JIT の仕組みと JIT を利用した攻撃と防御について調べた

WebKit で使われている JIT 周りについて調べたのでメモ。このあたりの知識全然ないまま手探りでリソースを探して解釈した結果を書いているので、間違っていたらご指摘ください。 JSC の execution engine は次の4つの最適化レベルがある。これらは実行時に使い分けられる。 LLInt Baseline JIT DFG JIT FTL JIT ref : https://we...

WebKit の JSObject の Butterfly アドレスについて調べた

WebKit の JSObject について調べていたのでメモ。 準備 まずはリポジトリを clone する。 $ ghq get git://git.webkit.org/WebKit.git debug 付きで JavaScriptCore のみをビルドして実行する。 $ ./Tools/Scripts/build-webkit --jsc-only --debug $ ./WebKitBui...

Method Overwrite をリバースプロキシ環境下で悪用する

X-HTTP-Method-Override ヘッダは知っている人も多いと思います。 いわゆる Method Override と呼ばれるもので POST で他のメソッドを代替するときなどに使用されます。 例えば次のようなリクエストを送ると POST ではなく PUT として処理されます。 POST /posts HTTP/1.1 Host: example.com X-HTTP-Method-O...

Helm Chart で生成された manifests をテストする

chart のテストは https://helm.sh/docs/topics/chart_tests/#helm にあるように、実際に helm install する必要があります。 そうではなくて、単純に吐き出される manifests が期待したものかどうかをテストしたいというケースもあると思います(僕はあった)。 helm template --execute (v3 だと --show-...

Vault の Agent Sidecar Injector を使う

Vault の Agent Sidecar Injector を使うと Vault に格納された Secret を Sidecar 経由で Pod に渡したりすることができます。 https://github.com/hashicorp/vault-k8s ここでは、Agent SIdecar Injector の概要を把握し、Vault の PKI Secret Engine で生成した証明...

Vault の TOTP Secrets Engine を使う

Vault には TOTP Secrets Engine があり、TOTP コードの生成や検証が可能になっている。 ここでは、TOTP Secrets Engine を利用し、Go からそれを利用する方法についてメモ程度に書く。 TOTP Secrets Engine を有効にする $ vault secrets enable totp デフォルトでは totp/ という Path になるので、...

How to Bypass Falco

falco のルールは、そこそこ柔軟に書けるのだが、故にバイパスできてしまうよという話。 1. /proc/self/root を使う falco のデフォルトルールに /etc/shadow などが開かれたことを検知するルールがある。 https://github.com/falcosecurity/falco/blob/dev/rules/falco_rules.yaml#L1405 抜粋...