Skip to content
TopicTracker
出典 HackerNews原文を表示
翻訳言語翻訳言語

ダングリングポインタ

ダングリングポインタとは、解放済みのメモリ領域を指し示すポインタのことである。このポインタを介してメモリにアクセスすると、プログラムのクラッシュやセキュリティ上の脆弱性を引き起こす可能性がある。C言語やC++などの低レベル言語において、メモリ管理の誤りとしてよく見られる問題である。

背景メモ

- ダングリングポインタ(dangling pointer)とは、プログラミングにおいて、すでに解放されたメモリ領域を指し示しているポインタのこと。このポインタを介してメモリにアクセスすると、プログラムのクラッシュや予期せぬ動作、セキュリティ脆弱性(任意コード実行など)を引き起こす可能性がある。 - 主な発生原因は、(1) 動的確保したメモリをfree/deleteした後にポインタをNULLにリセットし忘れる、(2) 関数ローカルの変数へのポインタを関数外に返す、(3) 同じメモリ領域を二重に解放(double free)する、など。 - CやC++のように手動メモリ管理を行う言語で特に問題となりやすい。RustやGoなどの現代的な言語は所有権やガベージコレクションの仕組みでこの問題を回避する設計になっている。 - 脆弱性対策として有名な「Use-After-Free(UAF)」攻撃は、このダングリングポインタを悪用したもの。攻撃者が解放後のメモリ領域に別のデータを書き込み、プログラムを意図通りに操作する。2020年代に入ってもChromeやWindowsカーネルなど主要ソフトウェアで頻繁に発見・修正されているクラス。