Skip to content

[Bug] Login/Register: rebind guest API-токена без ротации (token fixation) #412

Description

@Ibochkarev

Описание проблемы

Processors\Api\Customer\Login (и аналогично Register) при наличии cookie/session API-токена привязывает его к аккаунту (set('customer_id', $customer->id)) без проверки прежнего владельца и без выдачи нового значения токена.

Это классический token fixation: украденный/подставленный guest token после логина жертвы даёт полный доступ к аккаунту.

Шаги воспроизведения

  1. Attacker получает guest token T (/customer/token/get или любой protected route с auto-create).
  2. Victim получает cookie ms3_token=T (XSS, shared browser, malware, mis-set cookie).
  3. Victim делает POST /api/v1/customer/login.
  4. T привязывается к аккаунту victim; attacker с T получает доступ к profile/addresses/orders.

Ожидаемое поведение

На login/register/verify: ротация API-токена (revoke старого guest или выдача нового), session_regenerate_id(true).

Фактическое поведение

// Login.php ~84-98
if ($tokenObj) {
    $tokenObj->set('customer_id', $customer->id);
    // TTL extend, save — значение token не меняется
}

Окружение

  • MiniShop3: beta / REST API
  • MODX: 3.x
  • PHP: 8.2+

Дополнительный контекст

Отдельно от #369 (checkout email capture). Здесь вектор — login/register bind существующего cookie-токена.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpriority: highВажно исправить в ближайшее время

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions