C and C++ Binaries


IO.SOCK.REUSE : SO_REUSEADDR の使用

要旨

SO_REUSEADDR ソケットオプションを使用した場合、同じポートで複数のバインドが起こり、結果としてサービスの盗難もしくは偽装が発生する可能性があります。

プロパティ

クラス名 Use of SO_REUSEADDR
日本語クラス名 SO_REUSEADDR の使用
クラス分類 セキュリティ (security)
ニーモニック IO.SOCK.REUSE
カテゴリー
CWE CWE:605 Multiple Binds to the Same Port
対応言語 C および C++ で利用可能です。
有効/無効設定 このワーニングクラスのチェックはデフォルトで有効になっています。チェックを無効にするにはプロジェクト設定ファイル (configuration file)に以下の WARNING_FILTER ルールを追加してください。
WARNING_FILTER += discard class="Use of SO_REUSEADDR"

#include <sys/socket.h>
#include <netdb.h>
#include <unistd.h>

int reuseaddr_socket(char *hostname){
    int status;
    struct addrinfo *res;
    int socketfd;
    int optval=1;

    status = getaddrinfo(hostname,"80", NULL, &res);
    if (status)  return status ;

    socketfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol);
    freeaddrinfo(res);
    if (socketfd == -1)  return -1 ;

    status = setsockopt(socketfd,     /* 'Use of SO_REUSEADDR' warning issued here */
                        SOL_SOCKET,
                        SO_REUSEADDR,
                        &optval,
                        sizeof optval);
    if (status == -1) { close(socketfd); return -1; }

    /* ... remainder of function */
    close(socketfd);
    return 1;
}

ワーニングを引き起こす関数

CodeSonar ships with library models that allow it to functions such as libc setsockopt() that can enable SO_REUSEADDR. If one of these functions is called with arguments that enable SO_REUSEADDR, a warning will be issued.

If you have created a custom library model for some function f() in terms of one of these existing models, calls to f() will also be capable of triggering Use of SO_REUSEADDR warnings.

関連のある設定ファイルパラメータ

設定ファイルの以下のパラメータがこのワーニングクラスのチェックに影響します。