Code Monkey home page Code Monkey logo

hive-graph's Introduction

logo

GraphQL interface for Terra blockchain based on terra.js

Features

  • Written in TypeScript, with type definitions.
  • Based on terra.js LCDClient spec.
  • GraphQL Schema auto-generate with decorators and TypeScript classes.
  • GraphQL Types compatible with columbus-4 and columbus-5.
  • LRU cache for every GraphQL query.

Environment setup

  • Install Node.js
    • Recommended method is by using NVM
    • Recommended Node.js version is v14.17
  • Install Docker

Get Started

Install all the dependencies:

npm ci

Copy the .env.sample file to .env

cp .env.sample .env

In the project directory, you can run:

npm run start:dev

Runs the NodeJs services in the development mode.
Open localhost:8085/graphql to view it in the browser or Postman.

The service will reload if you make edits.

Test

npm run test

Running the unit tests.

npm run test:cov

Running the test coverage.

License

This software is licensed under the MIT license. See LICENSE for full disclosure.

© 2021 Terraform Labs, PTE.


 

Powering the innovation of money.

hive-graph's People

Contributors

0xslipk avatar dependabot[bot] avatar dynalz avatar gregnuj avatar hanjukim avatar jeffwoooo avatar kjessec avatar mandrean avatar tuky191 avatar zmarouf avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

hive-graph's Issues

GraphQL batching vulnerability with alias

Impact:

  • DoS attack due to the amount of data that can be sent during a single API request
  • Bypass attempt and rate limits

This vulnerability allows me to send 3000 queries during a single API request. An attacker can grab the introspection scheme and send higher load requests.

PoC:
terra-1-vuln
terra-2-vuln

Remediation steps:
Add a validation process to ensure the query doesn’t contain more aliases than the chosen maximum. You need to limit batch queries.

I found, that your library uses the apollographql server as a dependency. The apollographql server has a DataLoader utility that allows us to use batching and caching:
https://www.apollographql.com/docs/apollo-server/data/data-sources/#using-with-dataloader
I believe that this DataLoader utility, combined with caching and batching, solves the current security problem.

If they don't solve the problem, the following libraries can help you limit batch requests:

Info about this attack:

Update wasm endpoint for non-classic chain cosmwasm chain

Current pisco-1 testnet hive is using the old Terra wasm endpoint /terra/wasm/v1beta1/ causing wasm query to fail and return Not Implemented error. The non-classic chain should use the direct cosmwasm endpoint /cosmwasm/wasm/v1/.

This query on testnet hive will fail with such error.

{
  wasm {
    codeInfo(codeID: 12) {
      code_creator
    }
  }
}
{
  "errors": [
    {
      "message": "[Not Implemented] error",
      "locations": [
        {
          "line": 3,
          "column": 5
        }
      ],
      "path": [
        "wasm",
        "codeInfo"
      ],
      "extensions": {
        "code": "INTERNAL_SERVER_ERROR",
        "exception": {
          "status": 501,
          "name": "LCDClientError",
          "message": "[Not Implemented] error",
          "stacktrace": [
            "LCDClientError: [Not Implemented] error",
            "    at WasmService.codeInfo (/app/dist/wasm/wasm.service.js:36:19)",
            "    at runMicrotasks (<anonymous>)",
            "    at processTicksAndRejections (internal/process/task_queues.js:95:5)",
            "    at async target (/app/node_modules/@nestjs/core/helpers/external-context-creator.js:77:28)"
          ]
        }
      }
    }
  ],
  "data": null
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.