Intigriti
Description

Crisp is the app-only supermarket that brings you better groceries. We deliver fresh, seasonal and affordable products from independent producers to families all over the Netherlands. That’s how we make good food accessible to more people. We are happy to announce our first bug bounty program! We've done our best to clean most of our known issues and now would like to request your help to spot the ones we missed.

Bounties
Low
0.1 - 3.9
Medium
4.0 - 6.9
High
7.0 - 8.9
Critical
9.0 - 9.4
Exceptional
9.5 - 10.0
Tier 2
100
350
1,000
2,000
3,000
Tier 2
€100 - €3,000
Rules of engagement
Required
Not applicable
max. 5 requests/sec
X-Intigriti-Username: {Username}

By participating in this program, you agree to:

  • Respect the Community Code of Conduct
  • Respect the Intigriti Terms and Conditions
  • Respect the scope of the program
  • Not discuss or disclose vulnerability information without prior written consent (including PoC's on YouTube and Vimeo)

Always use your @intigriti.me email address when registering in the app.

ALways use the for-hackers.crisp.* URLS for testing, do not test on other domains!

Domains
Tier 2
iOS

React-Native built iOS app

Tier 2
Android

React-Native built Android app

Tier 2
URL

Code review tool behind IP-filter

Tier 2
URL

Back-office management login page.
(for-hackers.crisp.kitchen is a CNAME to crisp.kitchen; it allows us to classify traffic)

Tier 2
URL

Main frontpage & landing pages.
(for-hackers.crisp.nl is a CNAME to crisp.nl; it allows us to classify traffic)

Tier 2
URL

Backend host to which apps connect.
(for-hackers.crispapp.nl is a CNAME to crispapp.nl; it allows us to classify traffic)

Tier 2
URL

Hidden web build of the app. Client-side issues that do not exist in the native apps are capped to low severity.

In scope

We are looking to find security problems in our website, our apps and world-facing APIs, exploitable with a Crisp account or without an account at all. Broadly speaking, this includes any improper manipulation of our business logic and backend software. A non-exhaustive list of examples:

  • Any manipulation of pricing/discount logic that allows for getting substantially discounted or free orders.
  • Leaks of other users' data than the user accessing the app.
  • The ability to claim invite/promotional codes improperly or multiple times.
  • The ability to login as another customer without having credentials for that customer.
  • Any SQL injection attacks achievable.
  • Any path/filename manipulation attacks that allow backend files to be read or overwritten.
  • XSS attacks on crisp.nl or in the app.
  • Being able to login on crisp.kitchen.
  • Remote code execution.

We commit to responding within 1 week to any identified problem(s).

🥞Our stack

Crisp runs a monolithic backend system. This includes the software that powers our logistics chain (e.g. purchasing products at suppliers, picking and packing items for customers into orders), but also the CMS for the 'public' part of the store (inputting promotional information, product information, managing customer interactions, etc.). Our backend service is written in PHP and Go, the management system itself is written in Javascript/Typescript and React.

Our customers shop through our mobile Android and iOS apps. The apps share a single React Native Javascript/Typescript code base.

Our application stack runs on servers hosted at Google Cloud.

  • Customer-facing parts (such as crispapp.nl and (www.)crisp.nl) are accessible over a load balancer to a group of worker nodes on a VPC.
  • Crisp-internal requests (such as to crisp.kitchen) are also distributed by a load balancer to a separate set of worker nodes running on the same VPC.
  • The VPC is intentionally difficult to access from the internet: the only entry points are a bastion host (bastion.crisp.services) and the aforementioned load balancers (lb-back.crisp.services and lb-front.crisp.services).

👨‍🏫 Pointers

  • Use our semi-hidden web build of the app instead of the native apps.
    • Because customers never use this, client-side issues on this SPA are out-of-scope.
  • Domains are used primarily for traffic shaping, and the backend is similar on most domains
    • Related issues on different domains might be treated as duplicates.
  • For crisp.kitchen, only the login page is currently in scope.
  • If you are not located in the Netherlands, please use our office's postal + number address when registering: 1072RG/163.
  • You can place an order (iDeal required) and cancel it through the app immediately afterwards: you will get a 100% refund the next day.

🥐 Swag & Rewards

We are happy to send our Crisp t-shirt or sweater to anyone that finds a High/Critical/Exceptional issue. Or for researchers based in the Netherlands, optionally a 50€ Crisp voucher.

Out of scope

Application

  • API key disclosure without proven business impact
  • Client-side issues on the /web-rn/ endpoint, that do not impact the native apps are capped to low severity
  • Wordpress usernames disclosure
  • Pre-Auth Account takeover/OAuth squatting
  • Self-XSS that cannot be used to exploit other users
  • Verbose messages/files/directory listings without disclosing any sensitive information
  • CORS misconfiguration on non-sensitive endpoints
  • Missing cookie flags
  • Missing security headers
  • Cross-site Request Forgery with no or low impact
  • Presence of autocomplete attribute on web forms
  • Reverse tabnabbing
  • Bypassing rate-limits or the non-existence of rate-limits.
  • Best practices violations (password complexity, expiration, re-use, etc.)
  • Clickjacking without proven impact/unrealistic user interaction
  • CSV Injection
  • Sessions not being invalidated (logout, enabling 2FA, etc.)
  • Tokens leaked to third parties
  • Anything related to email spoofing, SPF, DMARC or DKIM
  • Content injection without being able to modify the HTML
  • Username/email enumeration
  • Email bombing
  • HTTP Request smuggling without any proven impact
  • Homograph attacks
  • XMLRPC enabled
  • Banner grabbing/Version disclosure
  • Not stripping metadata of files
  • Same-site scripting
  • Subdomain takeover without taking over the subdomain
  • Arbitrary file upload without proof of the existence of the uploaded file
  • Blind SSRF without proven business impact (pingbacks are not sufficient)
  • Disclosed/misconfigured Google Maps API keys
  • Host header injection without proven business impact

General

  • In case that a reported vulnerability was already known to the company from their own tests, it will be flagged as a duplicate
  • Theoretical security issues with no realistic exploit scenario(s) or attack surfaces, or issues that would require complex end user interactions to be exploited
  • Spam, social engineering and physical intrusion
  • DoS/DDoS attacks or brute force attacks
  • Vulnerabilities that only work on software that no longer receive security updates
  • Attacks requiring physical access to a victim's computer/device, man in the middle or compromised user accounts
  • Recently discovered zero-day vulnerabilities found in in-scope assets within 14 days after the public release of a patch or mitigation may be reported, but are usually not eligible for a bounty
  • Reports that state that software is out of date/vulnerable without a proof-of-concept

Mobile

  • Shared links leaked through the system clipboard
  • Any URIs leaked because a malicious app has permission to view URIs opened
  • The absence of certificate pinning
  • Sensitive data in URLs/request bodies when protected by TLS
  • Lack of obfuscation
  • Path disclosure in the binary
  • Lack of jailbreak & root detection
  • Crashes due to malformed URL Schemes
  • Lack of binary protection (anti-debugging) controls, mobile SSL pinning
  • Snapshot/Pasteboard leakage
  • Runtime hacking exploits (exploits only possible in a jailbroken environment)
  • API key leakage used for insensitive activities/actions

Out of scope domains

  • Any domain that is not listed in the Domains section, is out of scope for this program
Severity assessment

This program follows Intigriti's contextual CVSS standard

FAQ

Where can we get credentials for the app?

You can self-register on the application but please don’t forget to use your @intigriti.me address. When not based in the Netherlands, use postal code 1072RG and house number 163.

Can I test the checkout flow?

You can place an order (iDeal required) and cancel it through the app immediately afterwards: you will get a 100% refund the next day.

Is there an easy way to see the HTTP requests the app is making to the backend?

There is a semi-hidden web version of the app, accessible at https://for-hackers.crispapp.nl/web-rn. This is not guaranteed to always work or to have feature parity with the iOS and Android apps, but should generally be much more convenient to work with.

All aboard!
Please log in or sign up on the platform

For obvious reasons we can only allow submissions or applications for our program with a valid Intigriti account.

It will only take 2 minutes to create a new one or even less to log in with an existing account, so don't hesitate and let's get started. We would be thrilled to have you as part of our community.

Researchers
last contributors
logo
logo
logo
logo
logo
logo
leaderboard
logo
logo
logo
logo
logo
logo
Overall stats
submissions received
86
average payout
€314
accepted submissions
13
total payouts
€3,450
Last 90 day response times
avg. time first response
< 2 days
avg. time to decide
< 4 days
avg. time to triage
< 3 days
Activity
7/22
Crisp
closed a submission
7/19
logo
created a submission
7/19
Crisp
closed a submission
7/19
logo
created a submission
6/18
Crisp
closed a submission
6/18
Crisp
closed a submission
6/14
Crisp
closed a submission
6/13
logo
created a submission
6/13
logo
created a submission
6/13
logo
created a submission