Common causes of Cross-Site Request Forgery (CSRF) vulnerabilities in Visualforce pages include:
1. **State Changes on Initialization**: Performing state changes or DML operations during page initialization, such as in class constructors or methods called from the `action` parameter of a Visualforce page. This bypasses the platform's default CSRF protection.
2. **CSRF Token Not Required**: Not enabling the `confirmationTokenRequired` boolean metadata field in the Visualforce page settings. Without this, GET requests to the page do not require a CSRF token, leaving it vulnerable.
3. **JavaScript Actions**: Actions submitted via JavaScript, as Visualforce's built-in CSRF protection does not cover these actions.
To mitigate these vulnerabilities, enable the `confirmationTokenRequired` field, avoid state changes or DML operations during initialization, and ensure actions are triggered by user interactions.