説明
保護されていないソケットで機密データを送信すると、ネットワークを観測する第三者に内容を読み取られる可能性があります。
想定される影響
- パスワード、トークン、個人情報を盗聴されたり再利用されたりするおそれがあります。
対処方法
接続先の証明書とホスト名を検証するTLSなど、保護された通信路を使ってください。検証に失敗したら送信を中止し、平文の接続へ切り替えないでください。
例
変更前
c
const char *password = getenv("PASSWORD");
send(fd, password, strlen(password), 0);
変更後
c
const char *password = getenv("PASSWORD");
SSL_write(ssl, password, strlen(password));
変更前は保護されていないソケットでパスワードを直接送ります。変更後はTLS接続の書き込みAPIを使います。sslの証明書・ホスト名の検証設定と接続処理は省略しています。環境変数の存在と長さを確認し、SSL_writeの戻り値、再試行、エラーも処理してください。