{"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/mca-bench-a-multimodal-benchmark-for","title":"MCA-Bench: A Multimodal Benchmark for Evaluating CAPTCHA Robustness Against VLM-based Attacks","arxiv_id":"2506.05982","date":"2025-06-06","proceeding":null,"authors":["Zonglin Wu","Yule Xue","Xin Wei","Yiren Song"],"abstract":"As automated attack techniques rapidly advance, CAPTCHAs remain a critical defense mechanism against malicious bots. However, existing CAPTCHA schemes encompass a diverse range of modalities -- from static distorted text and obfuscated images to interactive clicks, sliding puzzles, and logic-based questions -- yet the community still lacks a unified, large-scale, multimodal benchmark to rigorously evaluate their security robustness. To address this gap, we introduce MCA-Bench, a comprehensive and reproducible benchmarking suite that integrates heterogeneous CAPTCHA types into a single evaluation protocol. Leveraging a shared vision-language model backbone, we fine-tune specialized cracking agents for each CAPTCHA category, enabling consistent, cross-modal assessments. Extensive experiments reveal that MCA-Bench effectively maps the vulnerability spectrum of modern CAPTCHA designs under varied attack settings, and crucially offers the first quantitative analysis of how challenge complexity, interaction depth, and model solvability interrelate. Based on these findings, we propose three actionable design principles and identify key open challenges, laying the groundwork for systematic CAPTCHA hardening, fair benchmarking, and broader community collaboration. Datasets and code are available online.","url_abs":"https://arxiv.org/abs/2506.05982v1","url_pdf":"https://arxiv.org/pdf/2506.05982v1.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"mca-bench-a-multimodal-benchmark-for","repo_url":"https://github.com/noheadwuzonglin/mca-bench","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"mca-bench-a-multimodal-benchmark-for","repo_url":"https://github.com/MindSpore-scientific-2/code-12/tree/main/MCA","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":0,"framework":"mindspore","reach":null}],"tasks":[{"task_slug":"benchmarking","task_name":"Benchmarking"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2506.05982","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2506.05982"}},"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":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/noheadwuzonglin/mca-bench","reach":{"status":"ok","spdx":"Apache-2.0"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/MindSpore-scientific-2/code-12/tree/main/MCA","reach":null}],"summary":{"ran_honours":1,"unverified":12},"by_repo_kind":{"official":{"samples":12,"ran":0,"repositories":1},"listed":{"samples":1,"ran":1,"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":"5e2ed23acb71ee11","entry":"noop","repo":"MindSpore-scientific-2/code-12","repo_kind":"listed","path":"Fixup-Initialization/model_build.py","file_url":"https://github.com/MindSpore-scientific-2/code-12/blob/HEAD/Fixup-Initialization/model_build.py","link_basis":"harvester_set","language":"python","status":"ran_honours","verification_level":1,"contract_check":"HONOURS","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"5e2ed23acb71ee11"}},{"code_sha256_prefix":"1aeb97e5409a3096","entry":"find_files","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/clickmathtojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/clickmathtojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1aeb97e5409a3096"}},{"code_sha256_prefix":"a9e23bc861f13ce0","entry":"find_image","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/concattojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/concattojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"a9e23bc861f13ce0"}},{"code_sha256_prefix":"aadcdb0a231cb63a","entry":"find_image_and_txt","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/holegridtosjon.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/holegridtosjon.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"aadcdb0a231cb63a"}},{"code_sha256_prefix":"9f60ac4f9e99bf7e","entry":"find_image_file","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/gridtojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/gridtojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9f60ac4f9e99bf7e"}},{"code_sha256_prefix":"b87eadb55a39c2b7","entry":"find_pairs","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/colortojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/colortojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"b87eadb55a39c2b7"}},{"code_sha256_prefix":"37402595f83fc5a1","entry":"is_image","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/colortojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/colortojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"37402595f83fc5a1"}},{"code_sha256_prefix":"f393293b2dafecbb","entry":"metrics","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/concattojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/concattojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"f393293b2dafecbb"}},{"code_sha256_prefix":"462b41253304eb4b","entry":"parse_coords","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/dutojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/dutojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"462b41253304eb4b"}},{"code_sha256_prefix":"9ffd56c767ed71fd","entry":"parse_meta","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/clickmathtojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/clickmathtojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"9ffd56c767ed71fd"}},{"code_sha256_prefix":"d520fb64eba75a77","entry":"parse_txt","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/colortojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/colortojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d520fb64eba75a77"}},{"code_sha256_prefix":"1da12c3c24206d5f","entry":"parse_txt","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/frettojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/frettojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"1da12c3c24206d5f"}},{"code_sha256_prefix":"51cd016d57cb1441","entry":"parse_txt","repo":"noheadwuzonglin/mca-bench","repo_kind":"official","path":"tojson/geotojson.py","file_url":"https://github.com/noheadwuzonglin/mca-bench/blob/HEAD/tojson/geotojson.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"51cd016d57cb1441"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}