Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug]: Hackerone Report #23115

Closed
1 task done
bearycool11 opened this issue Dec 28, 2024 · 1 comment
Closed
1 task done

[Bug]: Hackerone Report #23115

bearycool11 opened this issue Dec 28, 2024 · 1 comment
Labels

Comments

@bearycool11
Copy link

Is there an existing issue for this?

  • I have searched the existing issues

What happened?

A bug happened!

To enhance the compileWithTimeout.ts function, you can consider the following steps:

Input validation: Validate the input code and timeout to ensure they are valid and within expected ranges. This can help prevent potential errors or security vulnerabilities.
Error handling: Implement robust error handling to catch and handle any errors that may occur during the compilation process. This can include errors related to the Cosmos SDK, smart contract instantiation, or other dependencies.
Resource limits: Consider implementing resource limits to prevent excessive resource consumption during the compilation process. This can include limits on execution time, memory usage, or other resources.
Sandboxed environment: Consider using a sandboxed environment to execute user-submitted code, such as a Docker container or a virtual machine. This can help isolate the compilation process and prevent potential security vulnerabilities.
Here is an updated example of the compileWithTimeout.ts function that includes some of these enhancements:

typescript

Copy code

import { MsgExecuteContract } from '@cosmos/cosmos-sdk/wasmd';
import { SigningStargateClient } from '@cosmos/cosmos-sdk/signing-stargate';

export async function compileWithTimeout(code: string, timeout: number): Promise {
// Input validation
if (!code || !timeout) {
throw new Error('Invalid input');
}

// Set up resource limits
const maxExecutionTime = 30000; // 30 seconds
const maxMemoryUsage = 1024 * 1024 * 1024; // 1 GB

// Create a sandboxed environment
const sandbox = await createSandboxedEnvironment();

try {
// Connect to a Cosmos node
const client = await SigningStargateClient.connect('node-url', 'mnemonic');

// Create a transaction that interacts with a smart contract
const msg = new MsgExecuteContract(
  'senderAddress',
  'contractAddress',
  { 
    instantiate: { 
      code, 
      // Other instantiation parameters
    } 
  },
  []
);

// Sign and broadcast the transaction
const result = await client.signAndBroadcast(
  'senderAddress',
  [msg],
  'auto'
);

// Check for errors
if (result.code !== 0) {
  throw new Error(`Error compiling contract: ${result.log}`);
}

// Check for resource limits
if (result.gasUsed > maxExecutionTime) {
  throw new Error(`Compilation exceeded maximum execution time`);
}
if (result.memoryUsed > maxMemoryUsage) {
  throw new Error(`Compilation exceeded maximum memory usage`);
}

// Return success
return true;

} catch (error) {
// Handle errors
console.error(error);
return false;
} finally {
// Clean up sandboxed environment
await destroySandboxedEnvironment(sandbox);
}
}
Note that this is just an updated example and may still require modifications to fit your specific use case and requirements.

Regarding the server.ts and index.ts files, these are likely responsible for setting up and running the server that interacts with the Cosmos SDK. The server.ts file may contain code that sets up the server, defines routes, and handles incoming requests, while the index.ts file may contain code that starts the server and sets up any necessary dependencies.

To enhance these files, you can consider the following steps:

Security: Implement security measures to protect the server from potential vulnerabilities, such as authentication and authorization mechanisms.
Error handling: Implement robust error handling to catch and handle any errors that may occur during server operation.
Logging: Implement logging mechanisms to track server activity and errors.
Monitoring: Implement monitoring mechanisms to track server performance and resource usage.
Here is an updated example of the server.ts file that includes some of these enhancements:

typescript

Copy code

import express, { Request, Response } from 'express';
import { SigningStargateClient } from '@cosmos/cosmos-sdk/signing-stargate';

const app = express();

// Set up security measures
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
app.use(authenticate);

// Set up routes
app.post('/compile', async (req: Request, res: Response) => {
try {
// Compile contract
const result = await compileWithTimeout(req.body.code, req.body.timeout);
res.json({ result });
} catch (error) {
// Handle errors
console.error(error);
res.status(500).json({ error: 'Internal Server Error' });
}
});

// Start server
const port = 3000;
app.listen(port, () => {
console.log(Server started on port ${port});
});

Vulnerability 1: Unauthenticated access to contract compilation

  • Description: The contract compilation endpoint is accessible without authentication, allowing unauthorized users to compile contracts.
  • Remediation: Implement authentication mechanisms to restrict access to authorized users.
  • Test and verify: Test the endpoint with unauthorized users to verify that access is restricted.

Vulnerability 2: Excessive resource consumption

  • Description: The contract compilation process can consume excessive resources, leading to performance issues.
  • Remediation: Implement resource limits to restrict the amount of resources consumed during compilation.
  • Test and verify: Test the endpoint with large contracts to verify that resource limits are enforced.
    Note that this is just an updated example and may still require modifications to fit your specific use case and requirements.

for safety reasons please go to https://hackerone.com/bugs?subject=user&report_id=2916215&view=draft&substates%5B%5D=editing&reported_to_team=&text_query=&program_states%5B%5D=2&program_states%5B%5D=3&program_states%5B%5D=4&program_states%5B%5D=5&sort_type=latest_activity&sort_direction=descending&limit=25&page=1

Cosmos SDK Version

main

How to reproduce?

https://hackerone.com/bugs?subject=user&report_id=2916215&view=draft&substates%5B%5D=editing&reported_to_team=&text_query=&program_states%5B%5D=2&program_states%5B%5D=3&program_states%5B%5D=4&program_states%5B%5D=5&sort_type=latest_activity&sort_direction=descending&limit=25&page=1

please go here for further information

@bearycool11

This comment was marked as spam.

@github-project-automation github-project-automation bot moved this to 📋 Backlog in Cosmos-SDK Dec 28, 2024
@tac0turtle tac0turtle closed this as not planned Won't fix, can't repro, duplicate, stale Dec 29, 2024
@github-project-automation github-project-automation bot moved this from 📋 Backlog to 🥳 Done in Cosmos-SDK Dec 29, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Status: 🥳 Done
2 participants