Fix unauthorized access and modification of project data (CVE-2020-15120)

An authenticated member of one project can modify and delete members of
another project, without knowledge of this other project's private
code. This can be further exploited to access all bills of another project
without knowledge of this other project's private code.

With the default configuration, anybody is allowed to create a new
project. An attacker can create a new project and then use it to become
authenticated and exploit this flaw. As such, the exposure is similar to
an unauthenticated attack, because it is trivial to become authenticated.

This issue was caused by a wrong database queries in PersonQuery.

For more details, see https://github.com/spiral-project/ihatemoney/security/advisories/GHSA-67j9-c52g-w2q9

(cherry picked from commit 8d77cf5d56)
This commit is contained in:
Baptiste Jonglez 2020-07-17 17:43:33 +02:00 committed by zorun
parent e87f9f6bcf
commit 9aef13b50c

View file

@ -278,13 +278,13 @@ class Person(db.Model):
def get_by_name(self, name, project): def get_by_name(self, name, project):
return Person.query.filter(Person.name == name)\ return Person.query.filter(Person.name == name)\
.filter(Project.id == project.id).one() .filter(Person.project_id == project.id).one()
def get(self, id, project=None): def get(self, id, project=None):
if not project: if not project:
project = g.project project = g.project
return Person.query.filter(Person.id == id)\ return Person.query.filter(Person.id == id)\
.filter(Project.id == project.id).one() .filter(Person.project_id == project.id).one()
query_class = PersonQuery query_class = PersonQuery