The GraphQL `joinProject` mutation allows any workspace member to add themselves to any project within that workspace, including secret or private projects (where `network=0`) to which they were not invited. This occurs because the resolver only verifies workspace-level membership and roles, failing to check the visibility of the target project. Consequently, project-level tenant isolation is bypassed, enabling low-privilege members to read and modify confidential data across all private projects.