JAVA.SV.LLM.TOOL.PRIV

認可チェックを行わない特権的な LLM ツールアクション

JAVA.SV.LLM.TOOL.PRIV チェッカーは、認可チェックを強制しない特権的または破壊的な LLM ツールアクションを特定します。

脆弱性とリスク

認可チェックを行わずに特権的または破壊的な操作を実行できる LLM ツールでは、モデルが現在のユーザーに付与されている権限の範囲を超えてしまう可能性があります。

軽減と防止

LLM が特権的または破壊的なツールを呼び出す前に、認可チェックを必須とします。

脆弱コード例

コピー
import dev.langchain4j.agent.tool.Tool;

public class AccountTools {
    private final UserAdminService userAdminService;

    public AccountTools(UserAdminService userAdminService) {
        this.userAdminService = userAdminService;
    }

    @Tool("Delete a user account")
    public void deleteUser(String accountId) {
        userAdminService.deleteAccount(accountId); // destructive action with no authorization check
    }
}

修正コード例

コピー
import dev.langchain4j.agent.tool.Tool;

public class AccountTools {
    private final AuthorizationService authorizationService;
    private final UserAdminService userAdminService;

    public AccountTools(AuthorizationService authorizationService, UserAdminService userAdminService) {
        this.authorizationService = authorizationService;
        this.userAdminService = userAdminService;
    }

    @Tool("Delete a user account")
    public void deleteUser(String accountId, UserPrincipal principal) {
        authorizationService.requirePermission(principal, "accounts:delete");
        userAdminService.deleteAccount(accountId);
    }
}