{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/arxiv-2602-00318","title":"Optimal Transport-Guided Adversarial Attacks on Graph Neural Network-Based Bot Detection","arxiv_id":"2602.00318","date":"2026-01-30","proceeding":"ICML","authors":["Kunal Mukherjee","Zulfikar Alom","Tran Gia Bao Ngo","Cuneyt Gurcan Akcora","Murat Kantarcioglu"],"abstract":"The rise of bot accounts on social media poses significant risks to public discourse. To address this threat, modern bot detectors increasingly rely on Graph Neural Networks (GNNs). However, the effectiveness of these GNN-based detectors in real-world settings remains poorly understood. In practice, attackers continuously adapt their strategies as well as must operate under domain-specific and temporal constraints, which can fundamentally limit the applicability of existing attack methods. As a result, there is a critical need for robust GNN-based bot detection methods under realistic, constraint-aware attack scenarios. To address this gap, we introduce BOCLOAK to systematically evaluate the robustness of GNN-based social bot detection via both edge editing and node injection adversarial attacks under realistic constraints. BOCLOAK constructs a probability measure over spatio-temporal neighbor features and learns an optimal transport geometry that separates human and bot behaviors. It then decodes transport plans into sparse, plausible edge edits that evade detection while obeying real-world constraints. We evaluate BOCLOAK across three social bot datasets, five state-of-the-art bot detectors, three adversarial defenses, and compare it against four leading graph adversarial attack baselines. BOCLOAK achieves up to 80.13% higher attack success rates while using 99.80% less GPU memory under realistic real-world constraints. Most importantly, BOCLOAK shows that optimal transport provides a lightweight, principled framework for bridging the gap between adversarial attacks and real-world bot detection.","url_abs":"https://arxiv.org/abs/2602.00318","url_pdf":"https://arxiv.org/pdf/2602.00318","source":{"archive":null,"snapshot":"2025-07-28","note":"not in the Papers with Code archive (frozen at the snapshot)","row_kind":"graph","title_abstract_authors_date":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)"},"code_links":[],"tasks":[],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2602.00318","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2602.00318"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"mentioned_in_github":null,"is_official":null,"provenance":"deterministic:regex_extraction","mentioned_in_paper":null,"url":"https://github.com/kunmukh/bocloak","reach":null}],"summary":{"ran":1,"ran_violates":1,"ran_draft_wrong":6,"ran_honours":2,"ran_fixture":3,"unverified":8},"by_repo_kind":{"found_in_text":{"samples":21,"ran":13,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":0,"samples":[{"code_sha256_prefix":"19db406a47f40e73","entry":"LoadedData","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"19db406a47f40e73"}},{"code_sha256_prefix":"6611f2db47e73e38","entry":"_as_long_idx","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_violates","verification_level":1,"contract_check":"VIOLATES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6611f2db47e73e38"}},{"code_sha256_prefix":"e8092e6e86d3012d","entry":"_build_adj_and_degrees","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"e8092e6e86d3012d"}},{"code_sha256_prefix":"c2c20d6c4928bb14","entry":"_canonical_dataset_key","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"c2c20d6c4928bb14"}},{"code_sha256_prefix":"78086fa1d6be8dee","entry":"_category_for_node_from_counts","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"78086fa1d6be8dee"}},{"code_sha256_prefix":"89d2297b1a2024b5","entry":"_cuda_peaks_mb","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"89d2297b1a2024b5"}},{"code_sha256_prefix":"5c9f537028d15101","entry":"_make_loader_for_nodes","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"5c9f537028d15101"}},{"code_sha256_prefix":"3f5923968386fca4","entry":"_neighbor_features_for_node","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"3f5923968386fca4"}},{"code_sha256_prefix":"bca019bb4f60bb27","entry":"_prepare_graph_and_signals","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"bca019bb4f60bb27"}},{"code_sha256_prefix":"cbfd074acaa48717","entry":"clone_node_as_new_bot","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"well_formed","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"cbfd074acaa48717"}},{"code_sha256_prefix":"0bed703c70211c7f","entry":"collect_edges_and_labels","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"0bed703c70211c7f"}},{"code_sha256_prefix":"37919e75748043c8","entry":"compute_neighbor_label_counts_generic","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"37919e75748043c8"}},{"code_sha256_prefix":"b5e89b42046448d5","entry":"sinkhorn_ot_cost","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":"invariant","behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"b5e89b42046448d5"}},{"code_sha256_prefix":"14ef9a3cee721083","entry":"_cpu_rss_mb","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"14ef9a3cee721083"}},{"code_sha256_prefix":"6f1cddb4277410e5","entry":"_reset_cuda_peaks","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"6f1cddb4277410e5"}},{"code_sha256_prefix":"24326f7d587fe56f","entry":"build_neighbor_measures_for_nodes","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"24326f7d587fe56f"}},{"code_sha256_prefix":"62b7dab390d49e8f","entry":"compute_ot_plan_between_nodes","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"62b7dab390d49e8f"}},{"code_sha256_prefix":"8a38fe8dd11ae9c5","entry":"log_category_table","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"8a38fe8dd11ae9c5"}},{"code_sha256_prefix":"72ab879f656cbb09","entry":"predict_nodes","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"72ab879f656cbb09"}},{"code_sha256_prefix":"1214129da68a2e3f","entry":"run_human_template_special_case","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"1214129da68a2e3f"}},{"code_sha256_prefix":"815aafd76a56db2f","entry":"run_node_injection_experiment","repo":"kunmukh/bocloak","repo_kind":"found_in_text","path":"bocloak.py","file_url":"https://github.com/kunmukh/bocloak/blob/HEAD/bocloak.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"815aafd76a56db2f"}}]},"arxiv_metadata":{"licence":"arXiv metadata, CC0 1.0 (https://info.arxiv.org/help/license)","fields":["title","abstract","authors","date"],"primary_category":"cs.LG","source":"arxiv_2026.jsonl"},"syntology_extracted_results":null}