{"title":"DataDome Bot Bounty","slug":"datadome-bot-bounty","rules":"# About this program\nThe goal of this program is to find ways to bypass DataDome bot protection by implementing a scraping bot against our dedicated test environments. Reports about configuration weaknesses, information disclosure, or web application vulnerabilities are out of scope for this program.\n\n# DataDome publishes these websites dedicated to researchers:\n* [bounty-nodejs.datashield.co](https:\/\/bounty-nodejs.datashield.co) ([documentation on implementation](https:\/\/docs.datadome.co\/docs\/module-nodejs))\n* [bounty-fastly.datashield.co](https:\/\/bounty-fastly.datashield.co) ([documentation on implementation](https:\/\/docs.datadome.co\/docs\/module-fastly))\n* [bounty-nginx.datashield.co](https:\/\/bounty-nginx.datashield.co\/) ([documentation on implementation](https:\/\/docs.datadome.co\/docs\/nginx))\n* [bounty-cloudfront.datashield.co](https:\/\/bounty-cloudfront.datashield.co\/) ([documentation on implementation](https:\/\/docs.datadome.co\/docs\/cloudfront-integration-setup))\n\n\n# Reward scenarios\nAll scenarios require scraping real content from a single IP address. The minimum threshold to qualify is 30,000 allowed requests confirmed in the DataDome Dashboard.\n* Minimum scenario: scraping content should be: 30000 web pages in less than an hour.\n* Medium scenario: 30000 web pages scraped in 30 minutes\n* High scenario: 30000 web pages scraped in 10 minutes\n* Critical scenario: 30000 web pages scraped in less than 1 minute\n\nThe report should contain:\n* A description of the attack vector used and the protection mechanism being bypassed.\n* The complete, runnable code to reproduce the scenario.\n* The single IP address used during the attack.\n* The scraped content in the form of hashes contained in the page from the scraped pages (not hashes of the raw HTML files themselves) and HTTP requests return code (must be `200`). This flag has the form `pagehash_<random_hash>` (for example pagehash_b94337d90dafb27683afac39d2a24b3c)\n{YWH-P11870}\n* A CSV file with two columns: the page URL and its associated hash\n\n* The scraping speed (in hits per sec.)\n\n# How we validate\nWe verify all findings using the DataDome Dashboard Explore section. To qualify, we must observe at least 30,000 allowed requests from your declared IP within the stated time window. We will share a screenshot to confirm or reject the finding. Reports that do not meet this threshold will be closed regardless of the technique described.\nReference: https:\/\/docs.datadome.co\/docs\/how-to-explore-your-data\n\n# Important clarifications\n**Page hashes are the only valid proof of real content**. Regardless of the HTTP status code returned, only requests that yield a valid `pagehash_<random_hash>` extracted from the page content count as bypassed.\n**Obtaining a DataDome cookie is not a bypass**. Acquiring a cookie from any DataDome endpoint does not qualify on its own. Proof must include the full CSV of page hashes and Dashboard-confirmed allowed requests.\n**Scraping of static assets or URLs excluded from protection by configuration does not qualify**. Only requests to protected content count toward the volume threshold.\n**Findings on DataDome supporting infrastructure only qualify as part of a demonstrated bypass**. Any observation on endpoints outside the three target environments, including design characteristics of those endpoints, must be directly linked to a successful scraping scenario meeting the volume thresholds above. Informational findings will not be rewarded\n\n\n# Duplicate policy\nA report is a duplicate if a previously accepted report identified the same root bypass mechanism, even if the implementation differs. Variants of a known technique that share the same underlying evasion logic will be closed as duplicates.\n\n# Multi-domain findings\nIf the same attack vector bypasses protection across multiple target domains, only one report will be accepted and rewarded.","rules_html":"<h1>About this program<\/h1>\n<p>The goal of this program is to find ways to bypass DataDome bot protection by implementing a scraping bot against our dedicated test environments. Reports about configuration weaknesses, information disclosure, or web application vulnerabilities are out of scope for this program.<\/p>\n<h1>DataDome publishes these websites dedicated to researchers:<\/h1>\n<ul>\n<li><a href=\"https:\/\/bounty-nodejs.datashield.co\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/bounty-nodejs.datashield.co\">bounty-nodejs.datashield.co<\/a> (<a href=\"https:\/\/docs.datadome.co\/docs\/module-nodejs\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/docs.datadome.co\/docs\/module-nodejs\">documentation on implementation<\/a>)<\/li>\n<li><a href=\"https:\/\/bounty-fastly.datashield.co\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/bounty-fastly.datashield.co\">bounty-fastly.datashield.co<\/a> (<a href=\"https:\/\/docs.datadome.co\/docs\/module-fastly\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/docs.datadome.co\/docs\/module-fastly\">documentation on implementation<\/a>)<\/li>\n<li><a href=\"https:\/\/bounty-nginx.datashield.co\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/bounty-nginx.datashield.co\/\">bounty-nginx.datashield.co<\/a> (<a href=\"https:\/\/docs.datadome.co\/docs\/nginx\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/docs.datadome.co\/docs\/nginx\">documentation on implementation<\/a>)<\/li>\n<li><a href=\"https:\/\/bounty-cloudfront.datashield.co\/\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/bounty-cloudfront.datashield.co\/\">bounty-cloudfront.datashield.co<\/a> (<a href=\"https:\/\/docs.datadome.co\/docs\/cloudfront-integration-setup\" target=\"_blank\" rel=\"nofollow noopener noreferrer\" title=\"https:\/\/docs.datadome.co\/docs\/cloudfront-integration-setup\">documentation on implementation<\/a>)<\/li>\n<\/ul>\n<h1>Reward scenarios<\/h1>\n<p>All scenarios require scraping real content from a single IP address. The minimum threshold to qualify is 30,000 allowed requests confirmed in the DataDome Dashboard.<\/p>\n<ul>\n<li>Minimum scenario: scraping content should be: 30000 web pages in less than an hour.<\/li>\n<li>Medium scenario: 30000 web pages scraped in 30 minutes<\/li>\n<li>High scenario: 30000 web pages scraped in 10 minutes<\/li>\n<li>Critical scenario: 30000 web pages scraped in less than 1 minute<\/li>\n<\/ul>\n<p>The report should contain:<\/p>\n<ul>\n<li>\n<p>A description of the attack vector used and the protection mechanism being bypassed.<\/p>\n<\/li>\n<li>\n<p>The complete, runnable code to reproduce the scenario.<\/p>\n<\/li>\n<li>\n<p>The single IP address used during the attack.<\/p>\n<\/li>\n<li>\n<p>The scraped content in the form of hashes contained in the page from the scraped pages (not hashes of the raw HTML files themselves) and HTTP requests return code (must be <code>200<\/code>). This flag has the form <code>pagehash_&lt;random_hash&gt;<\/code> (for example pagehash_b94337d90dafb27683afac39d2a24b3c)<br \/>\n<img src=\"https:\/\/cdn-yeswehack.com\/program\/ef7dee41-1c93-49ac-8816-9d75e513e7ca?expires=1793923479&token=e6e6ef787e36448146144cdd3c81a34fa9a296aac96053bf7c65ffc7457c0d34\" type=\"image\/png\" alt=\"image.png\" data-attachment=\"11870\" class=\"file-attachment-img\"><\/p>\n<\/li>\n<li>\n<p>A CSV file with two columns: the page URL and its associated hash<\/p>\n<\/li>\n<li>\n<p>The scraping speed (in hits per sec.)<\/p>\n<\/li>\n<\/ul>\n<h1>How we validate<\/h1>\n<p>We verify all findings using the DataDome Dashboard Explore section. To qualify, we must observe at least 30,000 allowed requests from your declared IP within the stated time window. We will share a screenshot to confirm or reject the finding. Reports that do not meet this threshold will be closed regardless of the technique described.<br \/>\nReference: https:\/\/docs.datadome.co\/docs\/how-to-explore-your-data<\/p>\n<h1>Important clarifications<\/h1>\n<p><strong>Page hashes are the only valid proof of real content<\/strong>. Regardless of the HTTP status code returned, only requests that yield a valid <code>pagehash_&lt;random_hash&gt;<\/code> extracted from the page content count as bypassed.<br \/>\n<strong>Obtaining a DataDome cookie is not a bypass<\/strong>. Acquiring a cookie from any DataDome endpoint does not qualify on its own. Proof must include the full CSV of page hashes and Dashboard-confirmed allowed requests.<br \/>\n<strong>Scraping of static assets or URLs excluded from protection by configuration does not qualify<\/strong>. Only requests to protected content count toward the volume threshold.<br \/>\n<strong>Findings on DataDome supporting infrastructure only qualify as part of a demonstrated bypass<\/strong>. Any observation on endpoints outside the three target environments, including design characteristics of those endpoints, must be directly linked to a successful scraping scenario meeting the volume thresholds above. Informational findings will not be rewarded<\/p>\n<h1>Duplicate policy<\/h1>\n<p>A report is a duplicate if a previously accepted report identified the same root bypass mechanism, even if the implementation differs. Variants of a known technique that share the same underlying evasion logic will be closed as duplicates.<\/p>\n<h1>Multi-domain findings<\/h1>\n<p>If the same attack vector bypasses protection across multiple target domains, only one report will be accepted and rewarded.<\/p>","type":"bug-bounty","status":"V","demo":false,"public":true,"bounty":true,"gift":false,"hall_of_fame":false,"hacktivity":false,"report_count_per_scope":false,"report_collaboration_active":true,"pid":null,"secured":false,"triaged":null,"disabled":false,"vdp":false,"reports_count":114,"reports_imported_count":null,"pending_hunter_suggestions_count":0,"bounty_reward_min":200,"bounty_reward_max":1000,"scopes_count":6,"archived":false,"thumbnail":{"name":"1d640463-2125-4c17-9cd6-37b9d6d1a341","original_name":"DataDome-Icon-Logo-Brand-Square-Background.png","mime_type":"image\/png","size":19483,"url":"https:\/\/cdn-yeswehack.com\/program\/thumbnail\/1d640463-2125-4c17-9cd6-37b9d6d1a341"},"event":null,"business_unit":{"name":"DataDome","slug":"datadome","description":"Online fraud & bot management for mobile apps, websites & APIs","currency":"EUR","already_activate_product":true,"logo":{"name":"f35b357d-44bf-49de-acdb-d68af627bcba","original_name":"images.jpg","mime_type":"image\/jpeg","size":4056,"url":"https:\/\/cdn-yeswehack.com\/business-unit\/logo\/f35b357d-44bf-49de-acdb-d68af627bcba"}},"vpn_outbound_ips":null,"id":null,"scopes":[{"scope":"https:\/\/bounty-nodejs.datashield.co","scope_type":"web-application","scope_type_name":"Web application","asset_value":"HIGH","report_count":null},{"scope":"https:\/\/bounty-fastly.datashield.co","scope_type":"web-application","scope_type_name":"Web application","asset_value":"HIGH","report_count":null},{"scope":"https:\/\/bounty-nginx.datashield.co","scope_type":"web-application","scope_type_name":"Web application","asset_value":"HIGH","report_count":null},{"scope":"*.captcha-delivery.com","scope_type":"web-application","scope_type_name":"Web application","asset_value":"HIGH","report_count":null},{"scope":"js.datadome.co","scope_type":"web-application","scope_type_name":"Web application","asset_value":"HIGH","report_count":null},{"scope":"api-js.datadome.co","scope_type":"api","scope_type_name":"API","asset_value":"HIGH","report_count":null}],"out_of_scope":["Distributed attacks (scraping must be performed from a single IP at a time)","Denial of service attacks or any technique whose goal is to degrade infrastructure availability. This falls outside the scope of bot protection bypass and will not be rewarded.","Social engineering of DataDome employees or contractors","Client-side web vulnerabilities"],"qualifying_vulnerability":["A submission qualifies if it demonstrates a successful bypass of DataDome bot protection meeting all of the following conditions:","The scraping is performed from a single IP address against one of the three target environments.","The report includes the mandatory CSV file of page URLs and their associated hashes covering every scraped page.","The DataDome Dashboard confirms at least 30,000 allowed requests from the declared IP within the stated time window.","The report includes complete, runnable reproduction code.","The bypass exploits a weakness in DataDome's protection engine, not a misconfiguration specific to the test environment.","If a finding on endpoints outside the three target environments contributes directly and demonstrably to a successful scraping scenario meeting the above thresholds, it may qualify as part of that report."],"non_qualifying_vulnerability":["Reports without the mandatory CSV file of page URLs and hashes","Reports without runnable reproduction code","Cookie acquisition without demonstrated successful scraping at scale","Scraping of static assets or URLs excluded from protection by configuration","Techniques relying on multiple IPs, IP rotation, or distributed infrastructure","Findings based on a misconfiguration specific to the test environment rather than a weakness in DataDome's protection engine","Informational findings on DataDome infrastructure outside the three target environments that do not contribute to a demonstrated bypass at scale Reports where the Dashboard does not confirm the required volume of allowed requests"],"disclose_bounty_min_reward":null,"disclose_bounty_average_reward":null,"disclose_bounty_max_reward":null,"reward_grid_default":{"bounty_low":0,"bounty_medium":500,"bounty_high":2000,"bounty_critical":5000},"reward_grid_very_low":{"bounty_low":null,"bounty_medium":null,"bounty_high":null,"bounty_critical":null},"reward_grid_low":{"bounty_low":0,"bounty_medium":500,"bounty_high":2000,"bounty_critical":5000},"reward_grid_medium":{"bounty_low":null,"bounty_medium":null,"bounty_high":null,"bounty_critical":null},"reward_grid_high":{"bounty_low":200,"bounty_medium":500,"bounty_high":700,"bounty_critical":1000},"reward_grid_critical":{"bounty_low":null,"bounty_medium":null,"bounty_high":null,"bounty_critical":null},"tags":null,"vpn_active":false,"vpn_ips":null,"account_access":null,"account_access_html":null,"user_agent":null,"disable_message":null,"stats":{"max_reward":null,"average_reward":null,"average_first_time_response":1,"total_reports":114,"total_reports_last24_hours":0,"total_reports_last7_days":0,"total_reports_current_month":0},"supported_languages":["GB","FR"],"report_import_nb_max":null,"report_import_line_max":null,"banner":{"name":"e703c1bd-d64f-4b55-9084-0dff7827f1ad","original_name":"DataDome-Logo-Brand-Full-Background.png","mime_type":"image\/png","size":40672,"url":"https:\/\/cdn-yeswehack.com\/program\/banner\/e703c1bd-d64f-4b55-9084-0dff7827f1ad"},"restricted_ips":null,"has_pending_version":null,"rights":["view"],"attachments":null,"hunter_message_enabled":null,"send_hunter_message_validation_required":null,"max_credential_pool_number":null,"videos_attachments_enabled":true,"sla_enabled":null,"sla_grid":null,"systemic_issue_rule_enabled":false,"systemic_issue_rule_grid":{"level1":100,"level2":100,"level3":null,"level4":null,"level5":null,"level6":null},"leakage_rule_enabled":false,"leakage_rule_grid_in_scope":{"fully_in_scope":null,"partially_in_scope":null,"out_of_scope":null},"leakage_rule_grid_out_of_scope":{"fully_in_scope":null,"partially_in_scope":null,"out_of_scope":null},"ywh_triager_user_agent":null,"report_submission_cost":2,"program_metrics":{"report_count":null,"rewards_total_amount":null,"hunter_members_count":null,"active_hunters_count":null,"launched_agentic_campaigns_count":null,"total_agentic_campaigns_count":null,"reports_in_progress_count":null,"reports_in_progress_high_critical_count":null,"reports_assessed_count":null,"reports_assessed_high_critical_count":null,"reports_accepted_count":null,"reports_accepted_high_critical_count":null,"reports_resolved_count":null,"reports_closed_count":null,"computed_at":"2026-11-05T02:45:02+01:00"},"credit_balance":null,"credit_balance_projected":null,"has_history":true,"last_update_at":"2026-09-24T17:12:59+02:00","last_program_version":null}