「脆弱性」とは、プログラムの「不備(バグ)」の一種で、「本来 できないはずのことができてしまう」のが特徴です。
1. 脆弱性はバグの一種
一般的な「バグ」では、「特定の条件下で できるはずのことができないもの」です。
多くの場合、突然プログラムが停止してしまいます。
しかし、当然ながら反対のケースも起こりえます。
つまり、「セキュリティ上、制限されているはずの動作ができてしまう」。
このような場合に、「脆弱性(Vulnerability)」というわけです。
ただ、「見過ごされやすいバグ」なので、遭遇するケースは稀です。
一般の個人利用なら「もう悪用されてしまったのかなぁ…」などと心配する必要はありません。
定期的にシステムの更新をしていれば、それで十分です。

もちろん、企業などが自分で運用しているシステムなどではちょっと状況は違います。
しかし、個人の使うスマートフォンのシステムは、AppleやGoogleといった大企業が開発・メンテナンスしているので、ちゃんとアップデートをしていれば脆弱性による被害は少ないと言えます。
2. 脆弱性への攻撃は「バグ技」
「脆弱性」とは「プログラムのバグ」のことです。
ただし、「できるはずのことができない」のではなく、「できないはずのことができる」バグです。
ゲームなどでプレイヤーに有利な「バグ」を利用した操作を「裏技・バグ技」というのに似ています。
FF6の有名なバグ技。
裏技・バグ/【ドリル装備】 – ファイナルファンタジー用語辞典 Wiki*
正確には強制装備とでも呼ぶべきものだが、ドリル装備や機械装備の名で知られる。
「セキュリティの制限上できないはずのことが、たまたまできてしまうこと」が見つかると、悪用を防ぐために修正が必要になります。

ただ、「見過ごされたバグ」なのは、裏技と同じ。
極めて珍しい操作をしないと起こりません。
「インターネットをつながっていれば何でもされてしまう」というほど危険な状態というわけでもないのでご安心を。
3. コードとデータ(ノイマン型)
このような「脆弱性」が生まれてしまうのは、「ノイマン型コンピュータ(von Neumann architecture:stored-program computer)」の宿命でもあります。
現在のコンピュータは、「プログラムを データとして 記憶領域に入れて、これを順番に読み込んで実行する」構造になっています。
この構造を「ノイマン型」といい、さまざまな処理が柔軟にできるのはこのおかげです。
しかし、入力されたデータの処理を誤ると、それがコードとして実行されてしまう危険性もはらんでいます。
つまり、プログラム設計が適切でない場合、攻撃者が特殊な入力をしてシステム制限を無視した操作ができてしまいます。
これが「脆弱性」です。

正しく処理するためには、入力データがコード領域に入り込まないように「配慮」してプログラムする必要があります。
このような配慮が欠けてしまった場合の代表的な脆弱性に、「バッファ・オーバーフロー」や「SQLインジェクション」があります。



