Node.js Security Advisory: libuv – Incorrect Revocation Order While Relinquishing Privileges


A security vulnerability that potentially allows for local privilege escalation was recently announced (CVE-2015-0278). This affects node v0.10.36 and earlier.

It was found v0.10.36 and earlier that libuv did not call setgroups before calling setuid/setgid when spawning a child process. The child process might retain the privileges that were supposed to be dropped. This is fixed by also calling setgroups which removes any extraneous groups and drop the user to the expected privileges.

This security issue affects node applications that create child processes, while using the setuid or setgid option to limit the privileges that the child process has. Applications that do not use this feature are unaffected.
 
The newly released v0.10.37 has a fix to this above issue and can be downloaded from http://nodejs.org/dist/v0.10.37.

Please see the original bug report for more details and let me know if you have any further questions.

Subscribe to this thread in Google Groups to be notified of any security advisories related to Node.js and io.js from StrongLoop.

Node.js é solução corporativa: governança open source, v0.12 e números em constante crescimento!

Foi um ano emocionante até agora para o Node! Não só houve uma tremenda adoção ao Node nas empresas, mas na semana passada vimos também a versão v0.12 do Node ser finalmente liberada, além disso, o projeto Node mudou oficialmente para uma fundação com um modelo corporativo open source.

A adoção do Node nas empresas está crescendo rapidamente

As empresas estão aderindo cada vez mais ao Node devido às suas características comprovada de desempenho, sua capacidade de reter e utilizar habilidades de desenvolvedores de JavaScript e a capacidade de entregar projetos mais rápido em comparação com outras linguagens. Alguns casos de uso típicos relacionados a incrível popularidade do Node incluem:

  • Servidores de API – a “cola” que conecta dispositivos e aplicações aos dados
  • Mobile – aplicações JavaScript híbridas full-stack e backends
  • Internet das coisas (IoT) – o exponencial aumento de dispositivos que estão conectados à internet
  • Web – servidores HTTP e aplicações de página única

As empresas que vieram a público com o uso de Node e estão recrutando ativamente desenvolvedores para trabalhar em projetos Node incluem alguns nomes surpreendentes. Empresas como:

  • Whole Foods Market
  • Best Buy
  • Target
  • Wells Fargo
  • Fandango
  • GoDaddy
  • Staples
  • PG&E
  • Macy’s

Node is in production at big companies

Para saber mais sobre quais tipos de empresas estão utilizando o Node, confira o nosso último infográfico ou visite a nossa página de depoimentos para ver como que o StrongLoop está ajudando as empresas a ter sucesso com o Node.

Node é uma corporação com princípios open source

Projetos maduros e open sources bem sucedidos utilizados por grandes empresas dependem de uma governança open source e um conselho composto por grandes usuários e colaboradores ativos. A partir de hoje, o projeto Node foi movido para uma fundação administrada pela Linux Foundation. Alguns dos membros do conselho da fundação incluem:

  • IBM
  • Microsoft
  • Fidelity
  • PayPal
  • SAP
  • and more…

Sempre acreditávamos que uma fundação independente logo ajudaria inovações substanciais, e daria aos desenvolvedores e empresas a confiança de continuarem a investir recursos de desenvolvimento no Node. Isto iniciaria um ciclo virtuoso, acelerando ainda mais a popularidade e o crescimento do Node. O futuro do Node é incrivelmente brilhante e estamos animados em colaborar com os membros da Fundação a fim de continuar com esse sucesso.

A versão v0.12 do Node foi lançada

Dois anos no forno, e finalmente a versão v0.12 do Node foi lançada na semana passada. Versão que teve grandes melhorias de desempenho e escalabilidade. Abaixo está listado o que há de novo:

Para uma visão completa, confira a página sobre as “novas funcionalidades da versão v0.12 do Node”.

Habilidades em Node estão em demanda

O número de profissionais de Node está crescendo rapidamente para acompanhar a demanda necessária para a entrega de projetos.

  • Existem mais de 482 grupos e 128.000 membros que participam de Meetup sobre Node.js em todo o mundo.

nodeJS Meetup Groups

  • Existem mais de 100.000 membros no Linkedin que colocaram o NodeJS como habilidade.
  • De acordo com Indeed.com, o crescimento de empregos para Node.js está mais rápido do que Java e outras linguagens.

job trends

  • Desenvolvimento em Node está acontecendo mais durante o horário comercial que nos fins de semana, isso é um indicativo do uso predominante do Node em projetos comerciais. Os downloads na npm teve 200% mais volume durante os dias de semana do que nos fins de semana.

E o que mais?

Node é para ter projetos prontos rapidamente, para aproveitar o amplo conhecimento em JavaScript e escalar aplicações de alta concorrência necessária em dispositivos móveis, IoT e na próxima geração de APIs web. A StrongLoop tem todas as ferramentas que você precisa para desenvolver APIs durante todo o ciclo de vida. Saiba mais sobre como o StrongLoop pode acelerar o seu projeto Node.

 

Using Dependency Injection in Your JavaScript Unit Tests with Rewire

Editor: Check out this guest blog post by Igor Ribeiro Lima on how to perform JavaScript unit testing using dependency injection.

You probably already know that to do JavaScript testing well, you need to make sure you are testing the following:

  • Injecting mocks for other modules
  • Leaking private variables
  • Overriding variables within the module

rewire is a tool for helping test for the above. It provides an easy way to perform dependency injection, plus adds a special setter and getter to modules so you can modify their behaviour. What rewire doesn’t do is load the file and evaluate the contents to emulate the require mechanism. It actually uses Node’s own require to load the module.

To get started with dependency injection, we’ll create a twitter rest api server and do unit tests using mocks and overriding variables within modules. This example will focus on back-end unit testing, but if you want to use rewire also on the client-side take a look at client-side bundlers.

Read more

JavaScript ES6 Variable Declarations with let and const

Everyone in the JavaScript world is talking about ECMAScript 6 (ES6, a.k.a. ES 2015) and the big changes coming to objects (class, super(), etc), functions (default params, etc), and modules (import/export), but less attention is being given to variables and how they are declared. In fact, some attention is being given, but perhaps without the right focus. I recently attended the jQuery UK conference where Dave Methvin gave a nice overview of ES6, with some great attention on let and const.

In this article I wanted to cover these two new keywords for declaring variables and differentiate them from var. And possibly more importantly, I want to identify what some folks are considering the new standard for declaring variables in ES6. The basic idea here is that let should, in time, replace var as the default declaration keyword. In fact, according to some, var should simply not be used at all in new code. The const keyword should be used for any variable where the reference should never be changed, and let for anything else.

Read more

Foco de atención en Módulo npm de StrongLoop – Construir, desplegar y gestionar procesos Node.js

Editors Note: This post by Alex Gorbatchev was translated courtesy of Carlos Eduardo Carcamo Mendoza

Quiero tomarme un momento para hablar un poco sobre cómo desplegar tu aplicación Node.js. Este tema en general esta bastante bien definido pero no existen muchas herramientas hechas para Node. He visto aplicaciones Node.js desplegadas por Capistrano, y si, funcionan pero como desarrollador JavaScript eso no va del todo bien conmigo y preferiría algo más familiar, algo que se ajuste a mi infraestructura, algo que esté escrito en el lenguaje con el que estoy bien familiarizado y que cuando las cosas vayan mal pueda comprender los mensajes de error sin hacer una búsqueda extensiva.

indiana-jones-sand-bag

Presentando strong-pm

Introducción a strong-pm! Pero antes… ¿Como se despliega generalmente una aplicación Node.js? El código es enviado vía git push o git pull a uno o varios servidores. Luego cada servidor crea una construcción completa y hace un npm install. Posteriormente cada servidor procede a descargar y generar todas las dependencias NPM requeridas. Generalmente este es un proceso que consume bastante tiempo, sin mencionar que le cuesta una buena cantidad de dinero a la estimada gente de NPM Inc.

StrongLoop ha desarrollado una muy buena solución que consiste en tres módulos separados, cada uno haciendo lo suyo para darte un ligero flujo de trabajo para generar/desplegar/ejecutar listo para usarse.

  • strong-build – crea un elemento de construcción para tus proyectos (de otra manera un repositorio GIT) .
  • strong-deploy – envía el elemento de construcción generado por strong-build a una instancia en ejecución de strong-pm.
  • strong-pm – recibe el elemento de construcción y lo ejecuta localmente garantizando el tiempo de actividad.

Vamos a ver cada uno de ellos con algunos detalles para tener una mejor comprensión del trabajo involucrado en cada paso. Para una documentación técnica más completa por favor visita las páginas de GitHub de los links anteriores.

strong-build

strong-build es el primero de dos pasos en el camino para hacer tus ciclos de despliegues más sencillos. Esto es lo que hace:

  • Instala dependencias, ejecuta pasos de construcción personalizados, y reduce las dependencias de desarrollo, todo sin afectar tu estructura de código fuente.
  • Modifica los archivos de configuración package.json y .npmignore para que las dependencias sean empaquetadas.
  • Crea un paquete npm de la construcción o hace un commit de la construcción en una rama GIT de despliegue (basado en los ajustes seleccionados).

Por supuesto, todas las opciones acá (como en otros módulos) son totalmente configurables. Cada paso puede ser ejecutado mediante un comando individual y ejecutando strong-build los ejecuta a todos en secuencia: install, bundle, pack y commit. Al final podrías obtener un GIT deploy o bien un archivo TAR listo para ser enviado a la máquina destino.

Algo muy importante a tener en mente es que si tu aplicación utiliza cualquier módulo nativo (que es probable que lo haga), no querrás compilarlos durante la construcción a menos que el equipo donde estas ejecutando la construcción coincida con el servidor en términos de sistema operativo y librerías. Por defecto strong-build no ejecuta scripts NPM por lo tanto no ocurre una compilación. Esto quiere decir que puedes empaquetar y construir tus proyectos en tu laptop y desplegarlas con seguridad a producción asumiendo que todas las bibliotecas requeridas están instaladas en el servidor. Por supuesto puedes cambiar esto con la opción -- scripts que le indica a strong-build que ejecute los scripts NPM.

strong-deploy

Después que has ejecutado strong-build y tienes listo un elemento de construcción, el módulo strong-deploy hace la tarea de enviar la construcción a la instancia en ejecución de strong-pm. strong-deploy espera una ubicación de destino y la enviará a través de HTTP o SSH.

strong-pm

El corazón de todo el sistema es el módulo strong-pm. Se supone que debe estar funcionando como un servicio para el cual es sencillo generar archivos de sistema apropiados al SO. Luego que strong-deploy termine de enviar el nuevo elemento de construcción, strong-pm se prepara usando el comando prepare y posteriormente inicia la aplicación con el comando run.

Cuando se reinicia una aplicación en ejecución, strong-pm gentilmente tratará de detenerla e iniciar una nueva. Por defecto el clustering se basa en el número de núcleos disponibles del CPU.

Resumen

En el servidor:

  • Instalar strong-pm como un servicio del sistema usando el comando incluido sl-pm-install (consulta sl-pm-install --help para ver las opciones disponibles).
  • Iniciar el servicio.

En la máquina de construcción:

  • Ejecuta strong-build para generar un elemento de construcción.
  • Ejecuta strong-deploy para enviar el elemento a la instancia strong-pm en ejecución.

Desarrolla APIs visualmente con StrongLoop Arc

Metrics

StrongLoop Arc es una Interfaz de Usuario Gráfica para la Plataforma StrongLoop API, que incluye LoopBack, que complementa las herramientas de línea de comandos slc para desarrollar APIs rápidamente y permitir que estas se conecten a los datos. Arc también incluye herramientas para construir, perfilar y monitorear aplicaciones Node. Para comenzar solo se necesitan unos cuantos pasos sencillos!