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
This commit is contained in:
Baptiste Jonglez 2020-07-17 17:43:33 +02:00 committed by zorun
parent 040d76af83
commit 8d77cf5d56

View file

@ -380,7 +380,7 @@ class Person(db.Model):
def get_by_name(self, name, project): def get_by_name(self, name, project):
return ( return (
Person.query.filter(Person.name == name) Person.query.filter(Person.name == name)
.filter(Project.id == project.id) .filter(Person.project_id == project.id)
.one() .one()
) )
@ -389,7 +389,7 @@ class Person(db.Model):
project = g.project project = g.project
return ( return (
Person.query.filter(Person.id == id) Person.query.filter(Person.id == id)
.filter(Project.id == project.id) .filter(Person.project_id == project.id)
.one() .one()
) )